Raspberry Pi用dockerの構築

# Raspberry Pi用dockerの構築
## 1. ラズパイ用のdocker
　これでラズパイ用のdocker構築シリーズとしては3本目になります。最後がdockerについてです。

1. [Raspberry Pi用docker-composeの構築](http://qiita.com/tkyonezu/items/ceaaf41924df39254058)
1. [Raspberry Pi用docker-distributionの構築](http://qiita.com/tkyonezu/items/aa77b82ed4e92046c7c1)
1. [Raspberry Pi用dockerの構築](http://qiita.com/tkyonezu/items/0494ecfb71736529cfdf) (この記事です)

　`docker`は、Dockercon17で発表されたように [docker/docker](https://github.com/docker/docker)から[moby/moby](https://github.com/moby/moby)にリポジトリも移行しています。この移行後の`moby/moby`でもラズパイはサポートされていますので、この環境での構築方法のメモ書きとなります。

　Docker参照ドキュメントとして、[Work with a development container](https://docs.docker.com/opensource/project/set-up-dev-env/)

## 2. moby/mobyをクローン

　最初に[moby/moby](https://github.com/moby/moby)をクローンします。

```bash
git clone https://github.com/moby/moby.git
```

## 3. dockerのビルド

　`docker`を作成するには、クローンしたディレクトリに`cd`して、そのまま`make`を実行します。

```bash
cd moby
make
```

　ラズパイで実行して約6分ほどでしたが、色々とキャッシュされていて早かったのかも知れません。

　続けて、できあがったバイナリをインストールします。ビルドと同様にクローンした`moby`ディレクトリで以下を実行します。

```bash
make install
```

　既定値では、`/usr/local/bin`ディレクトリに以下のコマンドがインストールされます。

```bash
-rwxr-xr-x 1 root root  17121380 Apr 23 22:19 docker
-rwxr-xr-x 1 root root  35243444 Apr 23 22:20 dockerd
-rwxr-xr-x 1 root root   6068608 Apr 23 22:20 docker-runc
-rwxr-xr-x 1 root root   7822060 Apr 23 22:20 docker-containerd
-rwxr-xr-x 1 root root   7330636 Apr 23 22:20 docker-containerd-ctr
-rwxr-xr-x 1 root root   2506768 Apr 23 22:20 docker-containerd-shim
-rwxr-xr-x 1 root root   2236867 Apr 23 22:20 docker-proxy
-rwxr-xr-x 1 root root    400064 Apr 23 22:20 docker-init
```

## 4. dockerの実行

　`/usr/local/bin`にある`docker`コマンドを実行します。

```bash
# docker version
Client:
 Version:      17.06.0-dev
 API version:  1.30
 Go version:   go1.7.5
 Git commit:   83ee902
 Built:        Sun Apr 23 13:01:10 2017
 OS/Arch:      linux/arm

Server:
 Version:      17.06.0-dev
 API version:  1.30 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   83ee902
 Built:        Sun Apr 23 13:01:10 2017
 OS/Arch:      linux/arm
 Experimental: false
```

　`docker`のバージョンが`17.06.0-dev`でAPIバージョンも`1.30`になっています。

　ちなみに、現在docker公式で配布されているバージョンは、以下となっています。

```bash
# docker version
Client:
 Version:      17.04.0-ce
 API version:  1.28
 Go version:   go1.7.5
 Git commit:   4845c56
 Built:        Mon Apr  3 18:22:23 2017
 OS/Arch:      linux/arm

Server:
 Version:      17.04.0-ce
 API version:  1.28 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   4845c56
 Built:        Mon Apr  3 18:22:23 2017
 OS/Arch:      linux/arm
 Experimental: false
```

## 5.システムの設定

　docker公式で配布されている`docker-engine`の場合、`/usr/bin`ディレクトリにインストールされていますので、既に`docker-engine`をインストールしている場合には、思い切って削除するかパスで細工するなりしておきましょう。

　`docker-engine`では、systemd対応して`/etc/systemd/system/multi-user.target.wants/docker.service`が使用されています。この`docker.service`ファイルは、`/etc/default/docker`ファイルに対応していませんので、`ExecStart=`の行を直接編集しています。

```bash
## ExecStart=/usr/bin/dockerd -H fd://
ExecStart=/usr/local/bin/dockerd -H fd://
```

　編集後は`systemctl daemon-reload`するか、システムを再起動するかしておきます。

　ちなみに、上記の`docker version`例では、`/usr/local/bin/dockerd`をビルドした新しいものにしているために`Server`のバージョンも`17.06.0-dev`となっています。

　とりあえずは、以上となります。お楽しみいただけましたでしょうか。