README.md 6.4 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
peterwillcn's avatar
peterwillcn 已提交
18
git clone https://github.com/EOSIO/eos.git --recursive
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
70
alias cleos='docker-compose exec keosd /opt/eosio/bin/cleos -u http://nodeosd: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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
### Develop/Build custom contracts

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 eosio/builder. However, eosio/builder does not contain eosiocpp. As such, you will need to run eosio/builder interactively, and clone, build and install EOS. Once this is complete, you can then utilize eosiocpp to compile your contracts.

You can also create a Dockerfile that will do this for you.

```
FROM eosio/builder

RUN git clone -b master --depth 1 https://github.com/EOSIO/eos.git --recursive \
    && cd eos \
    && cmake -H. -B"/tmp/build" -GNinja -DCMAKE_BUILD_TYPE=Release -DWASM_ROOT=/opt/wasm -DCMAKE_CXX_COMPILER=clang++ \
       -DCMAKE_C_COMPILER=clang -DSecp256k1_ROOT_DIR=/usr/local -DBUILD_MONGO_DB_PLUGIN=true \
    && cmake --build /tmp/build --target install && rm -rf /tmp/build /eos
```

Then, from the same directory as the Dockerfile, simply run:

```bash
docker build -t eosio/contracts .
docker run -it -v /path/to/custom/contracts:/contracts eosio/contracts /bin/bash
```

At this time you should be at a bash shell. You can navigate into the /contracts directory and use eosiocpp to compile your custom contracts.

H
Huang-Ming Huang 已提交
112
### Change default configuration
H
Huang-Ming Huang 已提交
113 114 115 116 117 118 119

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:
120
  nodeos:
H
Huang-Ming Huang 已提交
121
    volumes:
122
      - nodeos-data-volume:/opt/eosio/bin/data-dir
K
Kevin Heifner 已提交
123
      - ./config2.ini:/opt/eosio/bin/data-dir/config.ini
S
Sandwich 已提交
124 125
```

H
Huang-Ming Huang 已提交
126
Then restart your docker containers as follows:
S
Sandwich 已提交
127 128

```bash
H
Huang-Ming Huang 已提交
129 130 131
docker-compose down
docker-compose up
```
H
Huang-Ming Huang 已提交
132 133

### Clear data-dir
134

H
Huang-Ming Huang 已提交
135 136 137
The data volume created by docker-compose can be deleted as follows:

```bash
138 139
docker volume rm nodeos-data-volume
docker volume rm keosd-data-volume
H
Huang-Ming Huang 已提交
140
```
141

K
Kevin Heifner 已提交
142
### Docker Hub
143

K
Kevin Heifner 已提交
144
Docker Hub image available from [docker hub](https://hub.docker.com/r/eosio/eos/).
A
Andrianto Lie 已提交
145
Create a new `docker-compose.yaml` file with the content below
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177

```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 已提交
178
*NOTE:* the default version is the latest, you can change it to what you want
K
kaidiren 已提交
179

180
run `docker pull eosio/eos:latest`
K
kaidiren 已提交
181

182 183
run `docker-compose up`

184
### Dawn 4.0 Testnet
N
noprom 已提交
185

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

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

N
noprom 已提交
190 191
```
# pull images
N
noprom 已提交
192
docker pull eosio/eos:latest
N
noprom 已提交
193
docker pull mongo:latest
N
noprom 已提交
194 195 196
# create volume
docker volume create --name=nodeos-data-volume
docker volume create --name=keosd-data-volume
N
noprom 已提交
197
docker volume create --name=mongo-data-volume
N
noprom 已提交
198
# start containers
199
docker-compose -f docker-compose-dawn4.0.yaml up -d
N
noprom 已提交
200 201 202 203
# get chain info
curl http://127.0.0.1:8888/v1/chain/get_info
# get logs
docker-compose logs nodeosd
N
noprom 已提交
204
# stop containers
205
docker-compose -f docker-compose-dawn4.0.yaml down
N
noprom 已提交
206 207
```

E
ene5135 已提交
208
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 已提交
209 210 211

### About MongoDB Plugin

S
Sterling Ledet 已提交
212
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.