この記事では、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でインデックスを振ることもできます
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を叩いて確認するのが確実です。