MacOSX
docker
Bitcoin
bitcoind

bitcoindをdockerで環境構築する

More than 1 year has passed since last update.

この記事では、Mac OS Sierra 10.12.4を使っています。

ビットコインのclient/APIであるbitcoindをdockerで環境構築した時の情報をまとめました。

1.docker hubからbitcoindのdockerfileを取得

今回はbitcoindで検索して最もpullの多い、kylemanna/bitcoindを使わせてもらいました。
https://hub.docker.com/r/kylemanna/bitcoind/

設定ファイルを変えたかったため、docker pullはせずにgithubのリポジトリからgit cloneしました。

git clone https://github.com/kylemanna/docker-bitcoind

2.bitcoindの実行オプション修正(任意)

cloneが完了したら、binフォルダにあるbtc_initを修正して、txindex=1を書き込みます。
txindexはダウンロードするbitcoinにインデックスを振るかどうかのオプションです。
インデックスがなければ、transactionの取得が使えませんので、設定しておきます。
※ダウンロード後にreindexでインデックスを振ることもできます

btc_init
cat <<EOF > $HOME/.bitcoin/bitcoin.conf
disablewallet=${DISABLEWALLET:-1}
printtoconsole=${PRINTTOCONSOLE:-1}
rpcuser=${RPCUSER:-bitcoinrpc}
rpcpassword=${RPCPASSWORD:-```dd if=/dev/urandom bs=33 count=1 2>/dev/null | base64```}
txindex=1 

bitcoin.confの作成をしているところにtxindex=1を追加します。
bitcoindはbitcoin.confの設定を見て動きます。

3.dockerのイメージをビルド

dockerfileのある場所で、imageをビルド。

docker build -t bitcoin .

4.ビルドしたイメージのコンテナを作成

bitcoindは全ブロックデータをダウンロードしようとします。
2017/6/6現在、約470000ブロックが存在しており、全てダウンロードすると40GB以上は容量を食ってしまいます。

そのため、-vオプションで、ホスト上のどこかにボリュームをマウントしておくことをお勧めします。私は、bitcoin-dataというフォルダを$HOME配下に作り実行しました。

docker run -v $HOME/bitcoin-data:/bitcoin --name=bitcoind-node -d \
     -p 8333:8333 \
     -p 127.0.0.1:8332:8332 \
     bitcoin

docker psでコンテナができていることを確認します。

docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                               NAMES
3f57b8b4ea28        bitcoin             "docker-entrypoint..."   27 minutes ago      Up 27 minutes       127.0.0.1:8332->8332/tcp, 0.0.0.0:8333->8333/tcp, 18332-18333/tcp   bitcoind-node

docker logsでビットコインのダウンロードも進んでいることを確認します。

docker logs --tail 100 bitcoind-node
2017-06-06 14:58:31 UpdateTip: new best=00000000003c40a610d51694b09cad43067fd097ac31d856a2e1b3920f4eaf6d height=76981 version=0x00000001 log2_work=53.6344 tx=108889 date='2010-08-29 02:57:51' progress=0.000480 cache=18.6MiB(86410tx)
2017-06-06 14:58:31 UpdateTip: new best=0000000000633aea8e81a332774908abcf638051b6fabaa9836c09351458b507 height=76982 version=0x00000001 log2_work=53.634676 tx=108890 date='2010-08-29 03:00:54' progress=0.000480 cache=18.6MiB(86411tx)

5.bitcoin-cliの動作確認

bashでコンテナの中に入って、bitcoin-cliのコマンドを叩いて返ってきたらOK!
あとはダウンロード完了を待ちます。(途中でダウンロードをやめたい場合は、bitcoin-cli setnetworkactive falseで中止できます。

bashでコンテナに入る

docker exec -i -t bitcoind-node bash

bitcoin-cliのコマンドを叩いて動作確認

bitcoin-cli getbestblockhash
000000000000021f8cc6b31d78e4ecc462c10925f15ea7e2b8fa16e8132d9712

bitcoin-cliのコマンド一覧wiki
※コマンドはよく更新されるのでhelpを叩いて確認するのが確実です。