この記事では、Mac OS High Sierra 10.13.1を使っています。
個人的に匿名性最強の一角だと思っている匿名系仮想通貨のMoneroです。
Dockerでフルノードを作成する方法をまとめました。
- はじめに(Dockerを使わない方法)
- Dockerfileの作成(ダウンロード)
- Dockerのイメージをビルド
- ビルドしたイメージのコンテナを作成
- moneroのコマンド動作確認
- Dockerによる仮想通貨のノード構築シリーズ
Moneroの匿名性仕様についてはこちらです。
Coinhiveで採掘される匿名性通貨Moneroはどの程度匿名か、仕様を調べてみた
はじめに(Dockerを使わない方法)
Moneroはめちゃくちゃフルノード構築が簡単です。 Monero公式ダウンロード先からOSに合うものをダウンロードして解凍するだけで一式揃います。
GUIの場合は、moneroのアプリケーションを実行するだけ、 CUIの場合は、解凍したフォルダ内にある「monerod」を実行するだけです。
ブロックの同期が済み次第、マイニングも簡単にできます。
以下は、GUIのウォレットをダウンロードして実行した画面です。 GUIでも簡単にマイニングの実行ができます。MoneroはCPUマイニングが可能なので、普段のPCで手軽にマイニングを楽しめます。
Dockerfileの作成(ダウンロード)
Dockerfileを自作しました。
Dockerfileは私のgithubリポジトリに公開しています。
#ubuntu:17.10をベースにする FROM ubuntu:17.10 MAINTAINER naomasabit <naomasabit@gmail.com> #wgetをインストールする RUN apt-get update && \ apt-get install -y wget #wgetでmoneroのcliをダウンロードする。(versionを変えたい場合は対応が必要) RUN wget https://downloads.getmonero.org/cli/monero-linux-x64-v0.11.1.0.tar.bz2 -P . #ダウンロードしたcliを解凍し、解凍前ファイルを削除する RUN apt-get install -y bzip2 #ダウンロードしたcliを解凍し、解凍前ファイルを削除する RUN tar -xjvf ./monero-linux-x64-v0.11.1.0.tar.bz2 &&\ rm ./monero-linux-x64-v0.11.1.0.tar.bz2 #ブロックチェーンデータの格納先 VOLUME /root/.bitmonero EXPOSE 18080 18081 CMD ["./monero-v0.11.1.0/monerod"]
手っ取り早くダウンロードするには、以下cloneコマンドを実行してください。
git clone https://github.com/naomasabit/monero-docker.git
Dockerのイメージをビルド
dockerfileのある場所で、imageをビルドします。
Dockerfileを配置したディレクトリで、以下コマンドを実行してdockerイメージを作ります。
docker build -t monero-node . #monero-nodeという名前でdockerイメージを作成
うまくできていれば、docker imagesコマンドで存在を確認できます。
docker images REPOSITORY TAG IMAGE ID CREATED SIZE monero-node latest d1ae00ca8572 23 minutes ago 398MB
ビルドしたイメージのコンテナを作成
docker run コマンドでイメージのコンテナを作成します。
- --name引数:コンテナの名称をつけます。「--name=monero-docker」はmonero-dockerという名称をつけます
- -dオプション:バックグラウンドで動かします
- -vオプション:ホスト上にvolumeをマウント(ダウンロードする大量のトランザクションなどをコンテナ外に出しておくことができまう) 「-v $HOME/monero-docker/monero-data:/root/.bitmonero」はホストの「$HOME/monero-docker/monero-data」にコンテナ内の「/root/.bitmonero」をマウントします
- -i ホストの入力をコンテナの標準出力をつなげます
ブロックチェーンデータは「/root/.bitmonero」に保存されます。
docker run -d -i --name=monero-docker \ -p 127.0.0.1:18081:18081 \ -v $HOME/monero-docker/monero-data:/root/.bitmonero monero-node
「docker ps」コマンドでコンテナができていることを確認します。
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cf075402d632 monero-node "./monero-v0.11.1...." 4 seconds ago Up 2 seconds 18080/tcp, 127.0.0.1:18081->18081/tcp monero-docker
「docker logs」コマンドでMoneroのダウンロードも進んでいることを確認します。
docker logs 2017-11-26 12:43:37.879 7fd562604f40 INFO global src/daemon/main.cpp:279 Monero 'Helium Hydra' (v0.11.1.0-release) 2017-11-26 12:43:37.883 7fd562604f40 INFO global src/daemon/protocol.h:55 Initializing cryptonote protocol... 2017-11-26 12:43:37.884 7fd562604f40 INFO global src/daemon/protocol.h:60 Cryptonote protocol initialized OK ... ********************************************************************** The daemon will start synchronizing with the network. This may take a long time to complete. You can set the level of process detailization* through "set_log <level|categories>" command*, where <level> is between 0 (no details) and 4 (very verbose), or custom category based levels (eg, *:WARNING) Use the "help" command to see the list of available commands. ********************************************************************** 2017-11-26 12:44:41.088 [P2P2] WARN net.dns src/common/dns_utils.cpp:487 WARNING: no two valid MoneroPulse DNS checkpoint records were received 2017-11-26 12:45:30.567 [P2P3] INFO global src/cryptonote_protocol/cryptonote_protocol_handler.inl:305 [91.99.117.142:18080 OUT] Sync data returned a new top block candidate: 1 -> 15001 [Your node is 15000 blocks (10 days) behind] SYNCHRONIZATION started 2017-11-26 12:45:36.680 [P2P7] INFO global src/cryptonote_protocol/cryptonote_protocol_handler.inl:305 [178.63.96.4:18080 OUT] Sync data returned a new top block candidate: 1 -> 1451462 [Your node is 1451461 blocks (1314 days) behind] SYNCHRONIZATION started 2017-11-26 12:45:39.028 [P2P6] INFO global src/cryptonote_protocol/cryptonote_protocol_handler.inl:1154 [178.63.96.4:18080 OUT] Synced 101/1451462 2017-11-26 12:45:39.715 [P2P0] INFO global src/cryptonote_protocol/cryptonote_protocol_handler.inl:1154 [178.63.96.4:18080 OUT] Synced 201/1451462 2017-11-26 12:45:40.433 [P2P8] INFO global src/cryptonote_protocol/cryptonote_protocol_handler.inl:1154 [178.63.96.4:18080 OUT] Synced 301/1451462 2017-11-26 12:45:41.138 [P2P5] INFO global src/cryptonote_protocol/cryptonote_protocol_handler.inl:1154 [178.63.96.4:18080 OUT] Synced 401/1451462
moneroのコマンド動作確認
bashでコンテナの中に入って、moneroのコマンドを叩いてみます。
docker exec -i -t monero-docker bash #dockerの中にbashで入る root@:/# ls bin boot dev etc home lib lib64 media mnt monero-v0.11.1.0 opt proc root run sbin srv sys tmp usr var root@:/# cd monero-v0.11.1.0/ #moneroのフォルダに移動 root@:/monero-v0.11.1.0# ./monerod sync_info #同期情報を確認 #同期ブロック情報が見られる Height: 67198, target: 1451467 (4.62966%) Downloading at 1409 kB/s 8 peers
「./monerod help」を叩けばコマンド情報が見られます。
start_miningでマイニングが実行でき、引数にアドレスとスレッド数とバックグラウンド実行、バッテリーを無視するかを設定します。
./monerod start_mining <addr> [<threads>] [do_background_mining] [ignore_battery]