README.md 6.1 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
## Start nodeos docker container only
peterwillcn's avatar
peterwillcn 已提交
24

S
Sandwich 已提交
25
```bash
peterwillcn's avatar
peterwillcn 已提交
26
docker run --name nodeos -p 8888:8888 -p 9876:9876 -t eosio/eos nodeosd.sh arg1 arg2
peterwillcn's avatar
peterwillcn 已提交
27
```
S
Sandwich 已提交
28

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

```bash
32
$ docker inspect --format '{{ range .Mounts }}{{ .Name }} {{ end }}' nodeos
H
Huang-Ming Huang 已提交
33 34 35
fdc265730a4f697346fa8b078c176e315b959e79365fc9cbd11f090ea0cb5cbc
$ docker volume rm fdc265730a4f697346fa8b078c176e315b959e79365fc9cbd11f090ea0cb5cbc
```
H
Huang-Ming Huang 已提交
36

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

H
Huang-Ming Huang 已提交
39
```bash
peterwillcn's avatar
peterwillcn 已提交
40
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 已提交
41 42
```

S
Sandwich 已提交
43 44 45
## Get chain info

```bash
peterwillcn's avatar
peterwillcn 已提交
46
curl http://127.0.0.1:8888/v1/chain/get_info
peterwillcn's avatar
peterwillcn 已提交
47 48
```

49
## Start both nodeos and keosd containers
H
Huang-Ming Huang 已提交
50 51

```bash
N
noprom 已提交
52
docker volume create --name=nodeos-data-volume
53
docker volume create --name=keosd-data-volume
N
noprom 已提交
54
docker-compose up -d
H
Huang-Ming Huang 已提交
55 56
```

A
Andrianto Lie 已提交
57
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 已提交
58

59
### Execute cleos commands
peterwillcn's avatar
peterwillcn 已提交
60

61
You can run the `cleos` commands via a bash alias.
S
Sandwich 已提交
62 63

```bash
64
alias cleos='docker-compose exec keosd /opt/eosio/bin/cleos -u http://nodeosd:8888'
65 66
cleos get info
cleos get account inita
peterwillcn's avatar
peterwillcn 已提交
67 68
```

H
Huang-Ming Huang 已提交
69 70
Upload sample exchange contract

S
Sandwich 已提交
71
```bash
72
cleos set contract exchange contracts/exchange/exchange.wast contracts/exchange/exchange.abi
peterwillcn's avatar
peterwillcn 已提交
73 74
```

75
If you don't need keosd afterwards, you can stop the keosd service using
S
Sandwich 已提交
76 77

```bash
78
docker-compose stop keosd
H
Huang-Ming Huang 已提交
79
```
80

E
Eric Iles 已提交
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
### 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 已提交
106
### Change default configuration
H
Huang-Ming Huang 已提交
107 108 109 110 111 112 113

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:
114
  nodeos:
H
Huang-Ming Huang 已提交
115
    volumes:
116
      - nodeos-data-volume:/opt/eosio/bin/data-dir
K
Kevin Heifner 已提交
117
      - ./config2.ini:/opt/eosio/bin/data-dir/config.ini
S
Sandwich 已提交
118 119
```

H
Huang-Ming Huang 已提交
120
Then restart your docker containers as follows:
S
Sandwich 已提交
121 122

```bash
H
Huang-Ming Huang 已提交
123 124 125
docker-compose down
docker-compose up
```
H
Huang-Ming Huang 已提交
126 127

### Clear data-dir
128

H
Huang-Ming Huang 已提交
129 130 131
The data volume created by docker-compose can be deleted as follows:

```bash
132 133
docker volume rm nodeos-data-volume
docker volume rm keosd-data-volume
H
Huang-Ming Huang 已提交
134
```
135

K
Kevin Heifner 已提交
136
### Docker Hub
137

K
Kevin Heifner 已提交
138 139
Docker Hub image available from [docker hub](https://hub.docker.com/r/eosio/eos/).
Replace the `docker-compose.yaml` file with the content below
140 141 142 143 144 145 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

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

174
run `docker pull eosio/eos:latest`
K
kaidiren 已提交
175

176 177
run `docker-compose up`

178
### Dawn 4.0 Testnet
N
noprom 已提交
179

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

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

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

E
ene5135 已提交
202
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 已提交
203 204 205

### About MongoDB Plugin

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