Dockerでのethereum環境構築(geth編)


まえがき

ethereumの開発環境をdockerで共有したい。

dockerには不慣れなのでひとまずDockerFileやDockerComposeのことは考えずに、コンテナ作成〜起動確認までをやってみる。

環境

  • macOS High Sierra 10.13.4
  • Docker for mac 18.03.1-ce-mac65

Docker for macはインストール済みとします。

イメージの取得

gethのイメージをpullします。

docker pull ethereum/client-go #tagをつけないとlatest版を取得する

コンテナの作成

取得したイメージからコンテナを作成します。

今回はethereumテストネットのropstenのノードを立てます。

docker run -d --name ethereum-ropsten-node -v $HOME/geth/ropsten:/root \
        -p 8545:8545 -p 30303:30303 \
        ethereum/client-go \
        --networkid "3" \
        --cache=1024 \
        --syncmode "fast" \ // 2018/09/25修正 --fastから左記へ変更
        --rpc \
        --rpcapi "db,eth,net,web3,personal,admin,miner" \
        --rpccorsdomain="*" \
        --rpcaddr "127.0.0.1"

コマンド説明

  • -d
    • デーモンで起動
  • --name ethereum-ropsten-node
    • コンテナ名を「ethereum-ropsten-node」とする
  • -v $HOME/geth/ropsten:/root
    • ボリュームのマウント先を指定
      • $HOME/geth/ropstenは、ホストのフォルダ
      • /rootは、コンテナ内のフォルダ
  • -p 8545:8545
    • ポートの指定
  • -p 30303:30303
    • 同じくポートの指定
  • ethereum/client-go以降は、gethの起動オプション
    • gethの起動オプションの詳細はこちら

起動確認

コンテナに入り、shを起動します。

docker exec -it ethereum-ropsten-node /bin/sh

今回はgethの起動時オプションに、rpcのオプションを付けていたのでRPC接続します。

geth attach http://127.0.0.1:8545

gethのjavascriptコンソールが立ち上がるので、ChainDataの同期を確認します。

追記: 2018/09/25

同期確認は少し時間を立ってから実行してください。(5分くらい?)

同期開始前の場合、 false と表示されます。

追記ここまで

> eth.syncing
{
  currentBlock: 17984,
  highestBlock: 5834590,
  knownStates: 35989,
  pulledStates: 33439,
  startingBlock: 0
}

無事、ChainDataの同期が始まってました。

あとがき

今回は単純にgethのノードのみを起動しましたが、機会があればdocker-compose + node + truffleとかの方法も書いてみたいと思います。

以上。