아직 Docker를 설치하지 않은 상태라면, 다음의 링크에서 다운로드 받을 수 있다: https://www.docker.com/community-edition
1단계: Docker 이미지 받기
다음 커맨드를 실행하면 컴파일된 EOSIO 소프트웨어를 포함한 Ubuntu 이미지를 받을 수 있다.
docker pull eosio/eos:v1.4.3
참고
2018년 11월 12일 현재 최신 버전은 1.4.3이다.
2단계: 노드와 지갑 시작하기
contracts
디렉토리를 생성한 단계의 마지막에서 절대 경로명을 파악했을 것이다. 이 contracts
디렉토리에 대한 절대 경로로 아래 커맨드의 "CONTRACTS_DIR" 부분을 모두 대체한다.
docker run --name eosio \
--publish 7777:7777 \
--publish 127.0.0.1:5555:5555 \
--volume CONTRACTS_DIR:CONTRACTS_DIR \
--detach \
eosio/eos:v1.4.3 \
/bin/bash -c \
"keosd --http-server-address=0.0.0.0:5555 & exec nodeos -e -p eosio --plugin eosio::producer_plugin --plugin eosio::chain_api_plugin --plugin eosio::history_plugin --plugin eosio::history_api_plugin --plugin eosio::http_plugin -d /mnt/dev/data --config-dir /mnt/dev/config --http-server-address=0.0.0.0:7777 --access-control-allow-origin=* --contracts-console --http-validate-host=false --filter-on='*'"
이 커맨드를 통해 다음과 같은 설정이 이루어진다.
경고
위의 설정에서 CORS를 모두( *
)에게 허용한 것은 개발 과정에서 사용하기 위한 용도로만 그렇게 한 것이며, 외부로 공개된 노드의 CORS를 절대로 모두( *
)에게 허용해서는 안된다!
3단계: 설정 확인하기
3.1단계: nodeos가 블록을 생산하고 있는지 확인하기
다음 커맨드를 실행한다.
docker logs --tail 10 eosio
콘솔에 다음과 비슷한 로그가 출력되어야 한다.
1929001ms thread-0 producer_plugin.cpp:585 block_production_loo ] Produced block 0000366974ce4e2a... #13929 @ 2018-05-23T16:32:09.000 signed by eosio [trxs: 0, lib: 13928, confirmed: 0]
1929502ms thread-0 producer_plugin.cpp:585 block_production_loo ] Produced block 0000366aea085023... #13930 @ 2018-05-23T16:32:09.500 signed by eosio [trxs: 0, lib: 13929, confirmed: 0]
1930002ms thread-0 producer_plugin.cpp:585 block_production_loo ] Produced block 0000366b7f074fdd... #13931 @ 2018-05-23T16:32:10.000 signed by eosio [trxs: 0, lib: 13930, confirmed: 0]
1930501ms thread-0 producer_plugin.cpp:585 block_production_loo ] Produced block 0000366cd8222adb... #13932 @ 2018-05-23T16:32:10.500 signed by eosio [trxs: 0, lib: 13931, confirmed: 0]
1931002ms thread-0 producer_plugin.cpp:585 block_production_loo ] Produced block 0000366d5c1ec38d... #13933 @ 2018-05-23T16:32:11.000 signed by eosio [trxs: 0, lib: 13932, confirmed: 0]
1931501ms thread-0 producer_plugin.cpp:585 block_production_loo ] Produced block 0000366e45c1f235... #13934 @ 2018-05-23T16:32:11.500 signed by eosio [trxs: 0, lib: 13933, confirmed: 0]
1932001ms thread-0 producer_plugin.cpp:585 block_production_loo ] Produced block 0000366f98adb324... #13935 @ 2018-05-23T16:32:12.000 signed by eosio [trxs: 0, lib: 13934, confirmed: 0]
1932501ms thread-0 producer_plugin.cpp:585 block_production_loo ] Produced block 00003670a0f01daa... #13936 @ 2018-05-23T16:32:12.500 signed by eosio [trxs: 0, lib: 13935, confirmed: 0]
1933001ms thread-0 producer_plugin.cpp:585 block_production_loo ] Produced block 00003671e8b36e1e... #13937 @ 2018-05-23T16:32:13.000 signed by eosio [trxs: 0, lib: 13936, confirmed: 0]
1933501ms thread-0 producer_plugin.cpp:585 block_production_loo ] Produced block 0000367257fe1623... #13938 @ 2018-05-23T16:32:13.500 signed by eosio [trxs: 0, lib: 13937, confirmed: 0]
3.2단계: 지갑 확인하기
다음과 같이 쉘을 연다.
docker exec -it eosio bash
다음 커맨드를 실행한다.
cleos --wallet-url http://127.0.0.1:5555 wallet list
다음과 같이 출력되어야 한다.
Wallets:
[]
이제 쉘을 종료한다.
exit
keosd 가 정상적으로 동작하고 있으므로 exit 을 치고 엔터를 눌러서 keosd 쉘을 빠져 나온다. 지금부터는 컨테이너의 bash 쉘을 사용하지 않을 것이며, 로컬 시스템에서(Linux 또는 Mac) 커맨드를 입력하게 된다.
3.3단계 nodeos 엔드포인트(endpoint) 동작 확인하기
이제 RPC API가 잘 동작하는지 확인한다. 둘 중 하나를 해 보면 된다.
curl http://localhost:7777/v1/chain/get_info
4단계: cleos alias 설정하기
nodeos나 keosd를 사용하려고 할 때마다 Docker 컨테이너 안의 bash를 불러내고 싶지는 않을 것이다. 이를 위해 alias를 만든다.
일시적으로 alias를 만드려면 다음 커맨드를 터미널에서 입력하고, 계속해서 alias하도록 하려면 Linux에서는 .bash_rc 에 Mac OS에서는 .profile 에 커맨드를 추가한다.
alias cleos='docker exec -it eosio /opt/eosio/bin/cleos --url http://127.0.0.1:7777 --wallet-url http://127.0.0.1:5555'
주석
.bash_rc 에 alias를 추가했다면 bash 세션을 다시 시작해야 한다.
5단계: 유용한 Docker 커맨드들 알아 두기
컨테이너 시작/종료
docker start eosio
docker stop eosio
bash 실행
docker exec -it eosio bash
EOSIO 컨테이너 삭제
docker rm eosio