Docker ではじめるCPUマイニング（モナコイン編）

# 1. はじめに
- 今回は、自分自身への備忘録を兼ねて、Docker（Dockerfile）を用いたCPUマイニングをはじめる方法を、お伝えしたいと思います。

参考：[モナコインのマイニングソフトをDockerで動かす](http://utsubo21.hatenablog.com/entry/2017/06/14/182356)
参考：[マイニングソフトの設定例](https://vippool.net/index.php?page=gettingstarted)
参考：[tpruvot / cpuminer-multi](https://github.com/tpruvot/cpuminer-multi)

# 2. この記事を読んでできること
- Docker（Dockerfile）を用いてMonacoin（アルトコイン）をCPUマイニングできるようになる。

# 3. 必要なもの
- Dockerホスト環境（この記事では Raspberry Pi3B ＋ Ubuntu 18.04 LTS（arm64）を利用）
- インターネット環境

# 4. 前提条件
- ハードウェア：Raspberry Pi3B
- OS：Ubuntu 18.04 LTS（arm64）
- アーキテクチャ：arm64

# 5. Dockerコンテナのセットアップ
- 以下のコマンドを順次実行し、cpuminerが実行できるDockerコンテナ環境をセットアップします。

```plaintext:コマンドプロンプト
// ディレクトリを移動
$ cd

// cpuminer-multiを取得
$ git clone -b linux https://github.com/tpruvot/cpuminer-multi.git

// ディレクトリを移動
$ cd cpuminer-multi

// Dockerfileの有無確認
$ ls Dockerfile
Dockerfile

// Dockerイメージのビルド（10分程度かかる）
$ docker build -t cpuminer-multi:latest .

// dockerイメージ一覧表示（IMAGE IDを確認する）
$ docker image ls

// イメージからコンテナを作成，起動
// 引数パラメータからご自身のアルゴリズム、マイニングアドレス、ユーザー名.ワーカー名、パスワードを設定してください。
$ docker run --name mona cpuminer-multi -a lyra2REv2 -o stratum+tcp://stratum1.vippool.net:8888 -u motokeikaku.user -p password -t 3

// Dockerコンテナの一覧表示
$ docker container ls -a

// Dockerコンテナ単体での自動起動を有効化
$ docker update --restart=always mona

// 自動起動が有効になっているコンテナを確認
$ docker inspect -f "{{.Name}} {{.HostConfig.RestartPolicy.Name}}" $(docker ps -aq) | grep always

// Dockerコンテナ単体での自動起動を無効化
$ docker update --restart=no mona

// コンテナを停止
$ docker stop mona

// Dockerコンテナの削除（必要なくなったら時に実行する）
$ docker rm mona
```

- マイニングプールについては、登録制で使える「[VIPPOOL](https://vippool.net/)」を利用しました。
- VIPPOOLの登録方法は、[【モナコイン（MONA）マイニング】オススメツールや手順をどこよりも丁寧に整理しました](https://www.lecotox.net/topics/monacoin-mining-10074/)を参考にするとよいと思います。
- ウォレットについては、[《モナコインのウォレット》MONAを安全に管理するなら⇒○○ウォレットが一番！](https://www.lecotox.net/topics/monacoin-wallet-9925/)などを参考に、ご自身で安全とおもわれるウォレットを選ばれるのが良いかと思います。
- ちなみに今回はウェブウォレットの「[もにゃ](https://monya-wallet.github.io/)」を利用しました。

# 6. CPUマイニング実行コマンドの例
- 以下のコマンドを実行し、CPUマイニングを実行します。

```plaintext:コマンドプロンプト
// CPUマイニング実行コマンドの例
// 記載解説
# docker run --name {コンテナ名} {イメージ名} -a {アルゴリズム} -o {マイニングアドレス} -u {ユーザー名.ワーカー名} -p {パスワード} -t {割当CPUコア数}

// 記載例
# docker run --name mona cpuminer-multi -a lyra2REv2 -o stratum+tcp://stratum1.vippool.net:8888 -u Weblogin.WorkerName -p WorkerPassword
```

# 7. CPUマイニング成功時のログ
- CPUマイニングに成功すると、「(yas!)」とログに出力されるかと思います。
- VIPPOOLの場合、あらかじめワーカー設定の「指定Difficulty」値を最小値の「0.0625」などに設定しておけば、起動後3分もすれば連続で「(yas!)」ログをおがめるかもしれません。

```plaintext:「(yas!)」ログ
[2020-02-24 04:32:54] Starting Stratum on stratum+tcp://stratum1.vippool.net:8888
[2020-02-24 04:32:54] 3 miner threads started, using 'lyra2rev2' algorithm.
[2020-02-24 04:32:54] Stratum difficulty set to 32768 (128.00000)
[2020-02-24 04:32:54] lyra2rev2 block 1921911, diff 3038562.847
[2020-02-24 04:32:59] CPU #2: 15.44 kH/s
[2020-02-24 04:32:59] CPU #0: 15.42 kH/s
[2020-02-24 04:32:59] CPU #1: 15.40 kH/s
[2020-02-24 04:33:51] Stratum difficulty set to 0.0625 (0.00024)
[2020-02-24 04:33:59] CPU #0: 15.45 kH/s
[2020-02-24 04:33:59] CPU #1: 15.42 kH/s
[2020-02-24 04:33:59] CPU #2: 15.46 kH/s
[2020-02-24 04:34:23] CPU #2: 15.46 kH/s
[2020-02-24 04:34:23] accepted: 1/1 (diff 0.000), 46.34 kH/s yes!
[2020-02-24 04:34:29] CPU #2: 15.46 kH/s
[2020-02-24 04:34:29] accepted: 2/2 (diff 0.000), 46.34 kH/s yes!
[2020-02-24 04:34:51] CPU #1: 15.42 kH/s
[2020-02-24 04:34:52] accepted: 3/3 (diff 0.000), 46.34 kH/s yes!
```


# 8. 参考：Dockerfile

```plaintext:Dockerfile
# Usage: docker build .
# Usage: docker run tpruvot/cpuminer-multi -a xevan --url=stratum+tcp://yiimp.ccminer.org:3739 --user=iGadPnKrdpW3pcdVC3aA77Ku4anrzJyaLG --pass=x

FROM            ubuntu:14.04
MAINTAINER      Tanguy Pruvot <tanguy.pruvot@gmail.com>

RUN             apt-get update -qq

RUN             apt-get install -qy automake autoconf pkg-config libcurl4-openssl-dev libssl-dev libjansson-dev libgmp-dev make g++ git

RUN             git clone https://github.com/tpruvot/cpuminer-multi -b linux

RUN             cd cpuminer-multi && ./build.sh

WORKDIR         /cpuminer-multi
ENTRYPOINT      ["./cpuminer"]
```

# 9. おわりに
いかがでしたでしょうか？意外と簡単にDocker（Dockerfile）を用いたCPUマイニングを始めることができたのではないかなと思います。
今回の記事が、みなさまの学習の参考になれば幸いです。

2020/02/24 TAKAHIRO NISHIZONO