README.md 5.8 KB
Newer Older
S
Sandwich 已提交
1
# Run in docker
N
Nathan Hourt 已提交
2

K
Kevin Heifner 已提交
3
Simple and fast setup of EOS.IO on Docker is also available.
S
Sandwich 已提交
4 5

## Install Dependencies
6 7 8

- [Docker](https://docs.docker.com) Docker 17.05 or higher is required
- [docker-compose](https://docs.docker.com/compose/) version >= 1.10.0
peterwillcn's avatar
peterwillcn 已提交
9

A
Andrianto Lie 已提交
10
## Docker Requirement
11

12
- At least 7GB RAM (Docker -> Preferences -> Advanced -> Memory -> 7GB or above)
S
Sterling Ledet 已提交
13
- If the build below fails, make sure you've adjusted Docker Memory settings and try again.
N
noprom 已提交
14

S
Sandwich 已提交
15
## Build eos image
peterwillcn's avatar
peterwillcn 已提交
16

S
Sandwich 已提交
17
```bash
A
Andreas Schlapbach 已提交
18
git clone https://github.com/EOSIO/eos.git --recursive  --depth 1
H
Huang-Ming Huang 已提交
19 20
cd eos/Docker
docker build . -t eosio/eos
peterwillcn's avatar
peterwillcn 已提交
21 22
```

23 24 25 26 27 28
The above will build off the most recent commit to the master branch by default. If you would like to target a specific branch/tag, you may use a build argument. For example, if you wished to generate a docker image based off of the dawn-v4.0.0 tag, you could do the following:

```bash
docker build -t eosio/eos:dawn-v4.0.0 --build-arg branch=dawn-v4.0.0 .
```

29
## Start nodeos docker container only
peterwillcn's avatar
peterwillcn 已提交
30

S
Sandwich 已提交
31
```bash
peterwillcn's avatar
peterwillcn 已提交
32
docker run --name nodeos -p 8888:8888 -p 9876:9876 -t eosio/eos nodeosd.sh arg1 arg2
peterwillcn's avatar
peterwillcn 已提交
33
```
S
Sandwich 已提交
34

H
Huang-Ming Huang 已提交
35
By default, all data is persisted in a docker volume. It can be deleted if the data is outdated or corrupted:
36 37

```bash
38
$ docker inspect --format '{{ range .Mounts }}{{ .Name }} {{ end }}' nodeos
H
Huang-Ming Huang 已提交
39 40 41
fdc265730a4f697346fa8b078c176e315b959e79365fc9cbd11f090ea0cb5cbc
$ docker volume rm fdc265730a4f697346fa8b078c176e315b959e79365fc9cbd11f090ea0cb5cbc
```
H
Huang-Ming Huang 已提交
42

H
Huang-Ming Huang 已提交
43
Alternately, you can directly mount host directory into the container
44

H
Huang-Ming Huang 已提交
45
```bash
peterwillcn's avatar
peterwillcn 已提交
46
docker run --name nodeos -v /path-to-data-dir:/opt/eosio/bin/data-dir -p 8888:8888 -p 9876:9876 -t eosio/eos nodeosd.sh arg1 arg2
H
Huang-Ming Huang 已提交
47 48
```

S
Sandwich 已提交
49 50 51
## Get chain info

```bash
peterwillcn's avatar
peterwillcn 已提交
52
curl http://127.0.0.1:8888/v1/chain/get_info
peterwillcn's avatar
peterwillcn 已提交
53 54
```

55
## Start both nodeos and keosd containers
H
Huang-Ming Huang 已提交
56 57

```bash
N
noprom 已提交
58
docker volume create --name=nodeos-data-volume
59
docker volume create --name=keosd-data-volume
N
noprom 已提交
60
docker-compose up -d
H
Huang-Ming Huang 已提交
61 62
```

A
Andrianto Lie 已提交
63
After `docker-compose up -d`, two services named `nodeosd` and `keosd` will be started. nodeos service would expose ports 8888 and 9876 to the host. keosd service does not expose any port to the host, it is only accessible to cleos when running cleos is running inside the keosd container as described in "Execute cleos commands" section.
H
Huang-Ming Huang 已提交
64

65
### Execute cleos commands
peterwillcn's avatar
peterwillcn 已提交
66

67
You can run the `cleos` commands via a bash alias.
S
Sandwich 已提交
68 69

```bash
E
Eric Iles 已提交
70
alias cleos='docker-compose exec keosd /opt/eosio/bin/cleos -u http://nodeosd:8888 --wallet-url http://localhost:8888'
71 72
cleos get info
cleos get account inita
peterwillcn's avatar
peterwillcn 已提交
73 74
```

H
Huang-Ming Huang 已提交
75 76
Upload sample exchange contract

S
Sandwich 已提交
77
```bash
78
cleos set contract exchange contracts/exchange/exchange.wast contracts/exchange/exchange.abi
peterwillcn's avatar
peterwillcn 已提交
79 80
```

81
If you don't need keosd afterwards, you can stop the keosd service using
S
Sandwich 已提交
82 83

```bash
84
docker-compose stop keosd
H
Huang-Ming Huang 已提交
85
```
86

E
Eric Iles 已提交
87 88
### Develop/Build custom contracts

E
Eric Iles 已提交
89
Due to the fact that the eosio/eos image does not contain the required dependencies for contract development (this is by design, to keep the image size small), you will need to utilize the eosio/eos-dev image. This image contains both the required binaries and dependencies to build contracts using eosiocpp.
E
Eric Iles 已提交
90

E
Eric Iles 已提交
91
You can either use the image available on [Docker Hub](https://hub.docker.com/r/eosio/eos-dev/) or navigate into the dev folder and build the image manually.
E
Eric Iles 已提交
92 93

```bash
E
Eric Iles 已提交
94 95
cd dev
docker build -t eosio/eos-dev .
E
Eric Iles 已提交
96 97
```

H
Huang-Ming Huang 已提交
98
### Change default configuration
H
Huang-Ming Huang 已提交
99 100 101 102 103 104 105

You can use docker compose override file to change the default configurations. For example, create an alternate config file `config2.ini` and a `docker-compose.override.yml` with the following content.

```yaml
version: "2"

services:
106
  nodeos:
H
Huang-Ming Huang 已提交
107
    volumes:
108
      - nodeos-data-volume:/opt/eosio/bin/data-dir
K
Kevin Heifner 已提交
109
      - ./config2.ini:/opt/eosio/bin/data-dir/config.ini
S
Sandwich 已提交
110 111
```

H
Huang-Ming Huang 已提交
112
Then restart your docker containers as follows:
S
Sandwich 已提交
113 114

```bash
H
Huang-Ming Huang 已提交
115 116 117
docker-compose down
docker-compose up
```
H
Huang-Ming Huang 已提交
118 119

### Clear data-dir
120

H
Huang-Ming Huang 已提交
121 122 123
The data volume created by docker-compose can be deleted as follows:

```bash
124 125
docker volume rm nodeos-data-volume
docker volume rm keosd-data-volume
H
Huang-Ming Huang 已提交
126
```
127

K
Kevin Heifner 已提交
128
### Docker Hub
129

K
Kevin Heifner 已提交
130
Docker Hub image available from [docker hub](https://hub.docker.com/r/eosio/eos/).
A
Andrianto Lie 已提交
131
Create a new `docker-compose.yaml` file with the content below
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163

```bash
version: "3"

services:
  nodeosd:
    image: eosio/eos:latest
    command: /opt/eosio/bin/nodeosd.sh
    hostname: nodeosd
    ports:
      - 8888:8888
      - 9876:9876
    expose:
      - "8888"
    volumes:
      - nodeos-data-volume:/opt/eosio/bin/data-dir

  keosd:
    image: eosio/eos:latest
    command: /opt/eosio/bin/keosd
    hostname: keosd
    links:
      - nodeosd
    volumes:
      - keosd-data-volume:/opt/eosio/bin/data-dir

volumes:
  nodeos-data-volume:
  keosd-data-volume:

```

A
Andrianto Lie 已提交
164
*NOTE:* the default version is the latest, you can change it to what you want
K
kaidiren 已提交
165

166
run `docker pull eosio/eos:latest`
K
kaidiren 已提交
167

168 169
run `docker-compose up`

170
### Dawn 4.0 Testnet
N
noprom 已提交
171

172
We can easily set up a Dawn 4.0 local testnet using docker images. Just run the following commands:
N
noprom 已提交
173

N
noprom 已提交
174 175
Note: if you want to use the mongo db plugin, you have to enable it in your `data-dir/config.ini` first.

N
noprom 已提交
176 177
```
# pull images
N
noprom 已提交
178
docker pull eosio/eos:latest
N
noprom 已提交
179
docker pull mongo:latest
N
noprom 已提交
180 181 182
# create volume
docker volume create --name=nodeos-data-volume
docker volume create --name=keosd-data-volume
N
noprom 已提交
183
docker volume create --name=mongo-data-volume
N
noprom 已提交
184
# start containers
185
docker-compose -f docker-compose-dawn4.0.yaml up -d
N
noprom 已提交
186 187 188 189
# get chain info
curl http://127.0.0.1:8888/v1/chain/get_info
# get logs
docker-compose logs nodeosd
N
noprom 已提交
190
# stop containers
191
docker-compose -f docker-compose-dawn4.0.yaml down
N
noprom 已提交
192 193
```

E
ene5135 已提交
194
The `blocks` data are stored under `--data-dir` by default, and the wallet files are stored under `--wallet-dir` by default, of course you can change these as you want.
N
noprom 已提交
195 196 197

### About MongoDB Plugin

S
Sterling Ledet 已提交
198
Currently, the mongodb plugin is disabled in `config.ini` by default, you have to change it manually in `config.ini` or you can mount a `config.ini` file to `/opt/eosio/bin/data-dir/config.ini` in the docker-compose file.