Raspbian BusterなRPi ZeroにDockerをインストールする

Raspberry Pi Zero
Raspberry Pi ZeroでDockerを使ってみます。Raspbian BusterにはDockerの簡単なインストール方法がまだ無いようです。そこで現在の方法を書いてみます。
数ヶ月後には状況が変わっているかもしれません。


前回Raspberry PiにDockerをインストールする記事を書きました。
関連記事:Raspberry PiにDockerをインストールする
しかしこの方法はRaspberry Pi Zeroには使えません。
Docker-CE need updating for raspbian buster #709 | github.com/docker
Raspbian basterがリリースされた直後はすべてのRaspberry Piにこの問題が生じていました。今はPi 1やPi Zeroにだけ問題が残っています。少し古いCPUのARM32V6で動かないバイナリがあるためのようです。

回避方法としてdocker-ceのバージョンを下げる方法があります。ですがRaspbian stretchまでにしかこの方法は使えません。Raspbian busterのレポジトリには古いdocker-ceが無いのです。

より正確にはdocker-ceではなくcontainerd.ioコンポーネントの問題のようです。いっそのことdocker-ceを自分でビルドしてしまえ・・・と思ったのですがビルド方法を調べると芋づる式にビルドしなくてはならないプログラムが増えていきました。これはやってられない。

先のフォーラムを読みすすめるとbuster用のcontainerd.ioのバイナリを配布しているサイトがあるそうです。
MichaIng commented on 31 Jul
Ah the link is wrong, it is just a webpage... also there is a Buster directory, so we'll use this.
Try with https://packagecloud.io/Hypriot/rpi/packages/raspbian/buster/containerd.io_1.2.6-1_armhf.deb/download.deb
ファイルは次の場所にあります。
Hypriot’s repos / Rpi
containerd.ioという名前でDistro/Versionが"raspbian/buster"とあるファイルを使います。この記事公開時はバージョン1.2.6-1が最新のようです。少し古くなってます。
このファイルをダウンロードしdpkgでインストールするようです。

これは公式のバイナリーではありません。不審な動作をする可能性もあります。インストールは自己責任で行いましょう。

Rpi ZeroにDockerをインストールする手順

それではRaspberry Pi ZeroにDockerをインストールしてみます。今回のRaspbianのバージョンを示しておきます。
lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
uname -a
Linux raspberrypi 4.19.57+ #1244 Thu Jul 4 18:42:50 BST 2019 armv6l GNU/Linux

Dockerのインストール

以前の記事のRaspberry Pi 3へのインストールと同じ手順を行います。
curl -sSL https://get.docker.com | sh
エラーで終わります。
+ sudo -E sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
E: Sub-process /usr/bin/dpkg returned an error code (1)
エラーに構わず続けます。
ユーザーをdockerグループへ追加しておきます。
sudo usermod -aG docker your-user

Docker Composeのインストール

Docker Composeをインストールします。最新版をインストールする方法はわかりませんでした。レポジトリからインストールします。
sudo apt install docker-compose
またエラーで終わります。
処理中にエラーが発生しました:
 docker-ce
E: Sub-process /usr/bin/dpkg returned an error code (1)

containerd.ioのインストール

Hypriot’s reposからcontainerd.ioのパッケージをダウンロードしてインストールします。
cd ~/Downloads
wget https://packagecloud.io/Hypriot/rpi/packages/raspbian/buster/containerd.io_1.2.6-1_armhf.deb/download.deb
sudo dpkg -i download.deb
rm download.deb
再起動します。

Dockerの動作確認

バージョンを確認します。
docker version
Client: Docker Engine - Community
 Version:           19.03.2
 API version:       1.40
 Go version:        go1.12.8
 Git commit:        6a30dfc
 Built:             Thu Aug 29 06:18:36 2019
 OS/Arch:           linux/arm
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.2
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.8
  Git commit:       6a30dfc
  Built:            Thu Aug 29 06:12:41 2019
  OS/Arch:          linux/arm
  Experimental:     false
 containerd:
  Version:          1.2.6
  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Version:          1.0.0-rc7+dev
  GitCommit:        029124da7af7360afa781a0234d1b083550f797c
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
docker-compose version
docker-compose version 1.21.0, build unknown
docker-py version: 3.4.1
CPython version: 3.7.3
OpenSSL version: OpenSSL 1.1.1c  28 May 2019
動いているようです。
ARM32V6用イメージがほとんどありません。動くものを探すのが大変です。これは使えないかも・・・
containerd.ioと同じくHypriot様のイメージを動かしてみます。
sudo docker run --rm hypriot/armhf-hello-world
Unable to find image 'hypriot/armhf-hello-world:latest' locally
latest: Pulling from hypriot/armhf-hello-world
[DEPRECATION NOTICE] registry v2 schema1 support will be removed in an upcoming release. Please contact admins of the docker.io registry NOW to avoid future disruption.
4b84770bb49c: Pull complete 
a3ed95caeb02: Pull complete 
Digest: sha256:b618ec0cc3acf683e8d77ad6c5ec81546cddde2036eda9a78f628effdeca74cd
Status: Downloaded newer image for hypriot/armhf-hello-world:latest
Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/userguide/
動いていますね。

まとめ

Raspberry Pi ZeroをRaspbian Busterで動かしています。これにDockerとDocker Composeをインストールしてみました。
containerd.ioに問題があり通常の方法では動かす事ができません。Hypriot様のバイナリをインストールすることで動かす事ができました。

Raspberry PiのCPUにも多くの世代がありPi ZeroはARMV6、Pi 3やPi 4はARMV8になっています。DockerのarmhfバイナリはARMV7以降を想定しているそうです。そのためPi Zeroで動くものは多くありません。
これではDockerの利点が活かせません。

Hypriot様のHP(https://blog.hypriot.com/)を見るとDockerが入ったPi Zeroでも動くOSイメージがあるようです。SDメモリーカードに書き込めばすぐにDockerが使えるようです。バイナリが信用できるかどうかについて本ブログ管理人はいっさい責任を負いませんし、関知いたしません。自己責任で利用してみてください。

コメント

最近のコメント

Threaded Recent Comments will be here.