ラズパイでDocker (Raspbian Jessie)
スポンサーリンク
お勉強用にラズパイにDocker をインストールしてみます。というか、公式ブログの手順そのままです。
先に書いておくと素直にx86でやった方がいいです。コマンド一発でインストールできるので。
インストール
コマンド一発です。さすが「楽すぎて何も身につかない」と評判のDebianベースのRaspbian。
$ curl -sSL https://get.docker.com | sh
自動的にセットアップ用のシェルスクリプトが実行されます。内容としては、 Docker のインストール用のパッケージリポジトリが自動で追加され、必要なパッケージが一式インストールされてDockerが起動します。
一気に自動起動の設定まで完了するようです。最終的に下記のメッセージが表示されるはず。
+ sudo -E sh -c docker version Client: Version: 1.12.2 API version: 1.24 Go version: go1.6.3 Git commit: bb80604 Built: Tue Oct 11 17:52:51 2016 OS/Arch: linux/arm Server: Version: 1.12.2 API version: 1.24 Go version: go1.6.3 Git commit: bb80604 Built: Tue Oct 11 17:52:51 2016 OS/Arch: linux/arm If you would like to use Docker as a non-root user, you should now consider adding your user to the "docker" group with something like: sudo usermod -aG docker pi Remember that you will have to log out and back in for this to take effect!
最後のメッセージは「もし非ルートユーザ権限でDockerを使用したいなら、下記のコマンドで現在のユーザー(pi)をdockerという名前のグループに追加するといいよ。一度ログアウトしないと有効にならないんで気をつけてね」というご託宣(超意訳)。
提示されたコマンドに否やはないので*1、素直に指示通りにする。毎回sudo
コマンドをつけずに実行できるようになります。
$ sudo usermod -aG docker pi
一旦ログアウトしてログインし直す。
動作確認
バージョンの確認など
バージョンとかシステムの状態とか。
``` $ docker version Client: Version: 1.12.2 API version: 1.24 Go version: go1.6.3 Git commit: bb80604 Built: Tue Oct 11 17:52:51 2016 OS/Arch: linux/arm
Server: Version: 1.12.2 API version: 1.24 Go version: go1.6.3 Git commit: bb80604 Built: Tue Oct 11 17:52:51 2016 OS/Arch: linux/arm ```
状態確認。
$ docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 1.12.2 Storage Driver: overlay Backing Filesystem: extfs Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: null host bridge overlay Swarm: inactive Runtimes: runc Default Runtime: runc Security Options: Kernel Version: 4.4.23-v7+ Operating System: Raspbian GNU/Linux 8 (jessie) OSType: linux Architecture: armv7l CPUs: 4 Total Memory: 862.1 MiB Name: raspberrypi ID: VYSO:QMV2:3LGH:ETXK:ZOUL:UBFG:OAEJ:L6VV:Q36H:MQCW:PFA4:UEZR 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 Insecure Registries: 127.0.0.0/8
WARNING がちょっと気になりますがスルーします。
いくつかはシステム起動時にカーネルにオプションを渡せば消せるみたいですが、全部消すにはカーネル再構築して差し替える必要ありとのこと。
参考:debian8のdockerでWARNINGが吐かれる件
とりあえず保留。
hello-world
おなじみのやつは実行できません。以下のようになります。
$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world c04b14da8d14: Pull complete Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9 Status: Downloaded newer image for hello-world:latest panic: standard_init_linux.go:175: exec user process caused "exec format error" [recovered] panic: standard_init_linux.go:175: exec user process caused "exec format error" (skip)
そもそも普通のDockerイメージはx86系CPU向けにビルドされているのでラズパイでは動かない。
対策
ARM用にビルドされたイメージを探してくるか、自分で作るかしかありません。
下記のコマンドでARM用のイメージを探します。
$ docker search armhf-
あまり数がない?
とりあえずUbuntu(おそらく非公式)。
$ docker run ioft/armhf-ubuntu Unable to find image 'ioft/armhf-ubuntu:latest' locally latest: Pulling from ioft/armhf-ubuntu 77c45a60f4e6: Pull complete 7d1fb2204ca8: Pull complete 8789c51a4fa7: Pull complete 8ac55180a8d1: Pull complete Digest: sha256:18046759911b86af563d1eb8518d1dc25b873a4c62b8aea2d185e6052e4adf92 Status: Downloaded newer image for ioft/armhf-ubuntu:latest
いやそうじゃなくて……。
$ docker run ioft/armhf-ubuntu /bin/echo 'Hello, World!' Hello, World!
お約束。
今度はコンテナにログインしてみる。
$ docker run -i -t ioft/armhf-ubuntu /bin/bash
プロンプトが表示されるので、OS情報など。
root@ff4401bd71bb:/# cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS" root@ff4401bd71bb:/# uname -a Linux ff4401bd71bb 4.4.23-v7+ #913 SMP Tue Oct 4 14:16:19 BST 2016 armv7l armv7l armv7l GNU/Linux root@ff4401bd71bb:/# exit exit
ログアウト。ホスト側のカーネルは下記の通り。
pi@raspberrypi:~ $ uname -a Linux raspberrypi 4.4.23-v7+ #913 SMP Tue Oct 4 14:16:19 BST 2016 armv7l GNU/Linux
参考:Installing, running, using docker on armhf (ARMv7) devices · umiddelb/armhf Wiki · GitHub-devices)
まとめ
とりあえず動きましたが、あまりARM向けのイメージ自体が提供されていないです。ありもののイメージを使うならDocker for Mac とかx86でやる方が良さそうです。
それではまた。
カラー図解 最新 Raspberry Piで学ぶ電子工作 作って動かしてしくみがわかる (ブルーバックス)
- 作者: 金丸隆志
- 出版社/メーカー: 講談社
- 発売日: 2016/07/20
- メディア: 新書
- この商品を含むブログを見る
Raspberry Pi 3 MODEL B 【RS正規流通品】
- 出版社/メーカー: Raspberry Pi
- 発売日: 2016/04/28
- メディア: Tools & Hardware
- この商品を含むブログを見る