やりたいこと
RaspberryPiのプロビジョニングが面倒くさいのでdockerを利用してみたかった。
お手軽実験キットとして扱うにしてもそこらへんはスピード感を持って動かしたい。
arm製だからか、オプションつきビルドをしないと動かないOSSライブラリがありそう。。
DockerをPiにインストールする
方法1.HypriotOSを利用する
この方法を利用すると、dockerがプリインストール済みの状態で利用可能となるが、
flushコマンドを利用せずにRaspberryPi3で動作確認したところ、WiFiのドライバが正しく認識されずに、network接続が有線LANのみで可能だった。flushコマンドを利用して後日確かめてみようと思う。
方法2.Raspbianにdocker-hypriotをinstallする
方法1.でいくしかないのか、と思っていたので、下記のblogを見つけて、おー、っとなった。
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だった。
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をインストールしてみた。
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
pi@raspberrypi.local:~ $ sudo docker build -t letusfly85/rpi-elixir ./
Runしてみる
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もどっかで試してみたい