RaspberryPi3のRaspbianにdocker-hypriotをinstallしてiexをお手軽に試す

## やりたいこと

RaspberryPiのプロビジョニングが面倒くさいのでdockerを利用してみたかった。
お手軽実験キットとして扱うにしてもそこらへんはスピード感を持って動かしたい。
arm製だからか、オプションつきビルドをしないと動かないOSSライブラリがありそう。。

## DockerをPiにインストールする

### 方法１．HypriotOSを利用する

この方法を利用すると、dockerがプリインストール済みの状態で利用可能となるが、
flushコマンドを利用せずにRaspberryPi3で動作確認したところ、WiFiのドライバが正しく認識されずに、network接続が有線LANのみで可能だった。flushコマンドを利用して後日確かめてみようと思う。

### 方法２．Raspbianにdocker-hypriotをinstallする

方法１．でいくしかないのか、と思っていたので、下記のblogを見つけて、おー、っとなった。

* http://blog.hypriot.com/post/run-docker-rpi3-with-wifi/

```bash
ssh pi@raspberrypi.local
sudo apt-get install -y apt-transport-https
wget -q https://packagecloud.io/gpg.key -O - | sudo apt-key add -
echo 'deb https://packagecloud.io/Hypriot/Schatzkiste/debian/ wheezy main' | sudo tee /etc/apt/sources.list.d/hypriot.list
sudo apt-get update
sudo apt-get install -y docker-hypriot
sudo systemctl enable docker
```

上記だけでいけた。

昨晩試したところ、この手法でインストールされるdockerのバージョンは1.11.1だった。

```bash
pi@raspberrypi.local:~ $ sudo docker info
Containers: 2
 Running: 0
 Paused: 0
 Stopped: 2
Images: 1
Server Version: 1.11.1
Storage Driver: devicemapper
 Pool Name: docker-179:2-398823-pool
 Pool Blocksize: 65.54 kB
 Base Device Size: 10.74 GB
 Backing Filesystem: ext4
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 1.075 GB
 Data Space Total: 107.4 GB
 Data Space Available: 25.53 GB
 Metadata Space Used: 1.614 MB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 2.146 GB
 Udev Sync Supported: true
 Deferred Removal Enabled: false
 Deferred Deletion Enabled: false
 Deferred Deleted Device Count: 0
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 WARNING: Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Library Version: 1.02.90 (2014-09-01)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins: 
 Volume: local
 Network: bridge null host
Kernel Version: 4.4.9-v7+
Operating System: Raspbian GNU/Linux 8 (jessie)
OSType: linux
Architecture: armv7l
CPUs: 4
Total Memory: 925.5 MiB
Name: rptkt
ID: XXIQ:5TFC:5RQN:322P:3VE2:KM2G:LM5Y:KNHX:D7XN:SLBE:75DP:6FSX
Docker Root Dir: /var/lib/docker
Debug mode (client): false
Debug mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No swap limit support
WARNING: No kernel memory limit support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
WARNING: No cpuset support
```

## イメージを試しに作成してみる

ちょこちょこいじってみたところ、普通に`docker build`はできる様子。
docker hubでは、プレフィクスが`rpi-`とあるのが、Pi用のイメージ群のよう。

ベースとなるイメージに`rpi-python`を指定して、elixirをインストールしてみた。

* https://github.com/letusfly85/rpi-elixir

```Dockerfile
FROM hypriot/rpi-python

RUN apt-get update
RUN apt-get install -y wget

RUN wget http://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && \
    dpkg -i erlang-solutions_1.0_all.deb && \
    sed -i -e "s/squeeze/wheezy/g" /etc/apt/sources.list.d/erlang-solutions.list && \
    apt-get update && \
    apt-get install -y erlang

RUN apt-get install -y git cmake build-essential

RUN git clone https://github.com/elixir-lang/elixir.git && \
    cd elixir && \
    git checkout v1.3 && \
    make clean && make && make install
```

```bash
pi@raspberrypi.local:~ $ sudo docker build -t letusfly85/rpi-elixir ./
```

## Runしてみる

```ex
pi@raspberrypi.local:~ $ sudo docker run -it letusfly85/rpi-elixir iex
Erlang/OTP 18 [erts-7.1] [source] [smp:4:4] [async-threads:10] [kernel-poll:false]

Interactive Elixir (1.3.0-rc.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> 
```

## 所感

お手軽感がぐっとでてきた＾＾

## TODO

* elixirのビルドはちゃんとやらないとですね。。
* serfはためしておきたい
* redis, etcdもためしてみたい
* k8s、consulもどっかで試してみたい