We keep a Docker image with recent snapshot builds from the `develop` branch [on DockerHub](https://hub.docker.com/r/ethereum/client-go/). In addition to the container based on [Ubuntu](http://www.ubuntu.com) (158 MB), there is a smaller image using [Alpine Linux](https://alpinelinux.org) (35 MB). To use the alpine [tag](https://hub.docker.com/r/ethereum/client-go/tags), replace `ethereum/client-go` with `ethereum/client-go:alpine` in the examples below.
To pull the image, run this command:
```shell
docker pull ethereum/client-go
```
Start a node with:
```shell
docker run -it -p 30303:30303 ethereum/client-go
```
To start a node that runs the JSON-RPC interface on port **8545**, run:
**WARNING: This opens your container to external calls. "0.0.0.0" should _not_ be used when exposed to public networks**
To use the interactive JavaScript console, run:
```shell
docker run -it -p 30303:30303 ethereum/client-go console
```
## Using Data Volumes
To persist downloaded blockchain data between container starts, use Docker [data volumes](https://docs.docker.com/engine/tutorials/dockervolumes/#/mount-a-host-directory-as-a-data-volume). Replace `/path/on/host` with the location you want to store the data in.
docker run -it -p 30303:30303 -v /path/on/host:/root/.ethereum ethereum/client-go
We maintain four different docker images for running the latest stable or development versions of Geth.
-`ethereum/client-go:latest` is the latest development version of Geth
-`ethereum/client-go:stable` is the latest stable version of Geth
-`ethereum/client-go:{version}` is the stable version of Geth at a specific version number
-`ethereum/client-go:release-{version}` is the latest stable version of Geth at a specific version family
<!-- TODO: What are these? Maybe best not in getting started -->
We also maintain four different docker images for running the latest stable or development versions of miscellaneous Ethereum tools.
-`ethereum/client-go:alltools-latest` is the latest develop version of the Ethereum tools
-`ethereum/client-go:alltools-stable` is the latest stable version of the Ethereum tools
-`ethereum/client-go:alltools-{version}` is the stable version of the Ethereum tools at a specific version number
-`ethereum/client-go:alltools-release-{version}` is the latest stable version of the Ethereum tools at a specific version family
<!-- TODO: Same again -->
The image has the following ports automatically exposed:
-`8545` TCP, used by the HTTP based JSON RPC API
-`8546` TCP, used by the WebSocket based JSON RPC API
-`30303` TCP and UDP, used by the P2P protocol running the network
-`30304` UDP, used by the P2P protocol's new peer discovery overlay
<!-- TODO: And again -->
_Note, if you are running an Ethereum client inside a docker container, you might want to mount in a data volume as the client's data directory (located at `/root/.ethereum` inside the container) to ensure that downloaded data is preserved between restarts and/or container life-cycles._