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

raspberry pi
Raspberry PiのRaspbian BusterにDockerをインストールしてみます。


Dockerという仮想化環境をRaspberry Piにインストールしてみます。Dockerを使うとプログラム開発などで使う環境をコンテナというものの中に作ることができます。

いろいろなプログラムを自分で作っていると必要となるライブラリを次々とインストールする事になります。そのうち、こっちのプログラムはライブラリのあるバージョンでしか動かせない、あっちのプログラムは同じライブラリの違うバージョンでしか動かない、とか出てきます。そのうち解らなくなってRaspbianのイメージをSDメモリーカードに焼き直して最初からやり直し・・・あれ?なんのライブラリを入れればいいんだっけ?設定ファイルをどうしたか憶えてないなぁ、となります。
こんな時はDockerという仮想環境を使うと便利になります。開発環境を一つのファイルに押し込めていつでも呼び出せるようになります。

この辺の詳しいことは他のサイト様にお任せです。ググってください。
ここではRaspberry PiのRaspbianにDockerをインストールする方法だけを書いておきます。

RaspbianにDockerをインストールする

RaspbianへDockerをインストールする方法は多くのサイトが書いてくれています。ですがなぜその方法でインストールするのかというのがはっきりしないサイトが多いです。ここではできるだけ公式の方法に則ってインストールして行きます。

Raspbianのバージョンはこの記事公開時最新の
Raspbian Buster with desktop Version:July 2019
です。Busterでも入れられます。

RaspbianへDockerをインストールする方法はこちらに書いてあります。
Get Docker Engine - Community for Debian | Docker Documentation
Debianへのインストールの説明のページです。基本はDockerのレポジトリの場所を追加してレポジトリからインストールします。ですがRaspbianではこの方法はまだ使えません。
Raspbian users cannot use this method!
For Raspbian, installing using the repository is not yet supported. You must instead use the convenience script.
Raspbianの場合は"convenience scripts"を使うのが唯一のアプローチだそうです。
In testing and development environments, some users choose to use automated convenience scripts to install Docker. This is currently the only approach for Raspbian.
"convenience scripts"はDockerをインストールしてくれるシェルスクリプトです。このスクリプトを実行するだけでOSに合ったDockerをインストールできます。
ですが注意点があるようなので確認してください。
Install using the convenience script
"Using these scripts is not recommended for production environments, and you should understand the potential risks before you use them:"

convenience scriptを使ってDockerをインストールする

それではconvenience scriptを動かしてDockerをインストールします。
先程のページにインストールコマンドが載っていますがRaspberry PiのBlogのコマンドを使ってみます。やってることは同じですがローカルにスクリプトファイルを作らなくて済みます。
Docker comes to Raspberry Pi
curl -sSL https://get.docker.com | sh”
ターミナルを開いて次のコマンドを入れます。
curl -sSL https://get.docker.com | sh
終わるまで数分かかるでしょう。最新の安定版が入るようです。バージョンの指定はできません。
スクリプトの実行が終わったらdockerグループにユーザーを追加します。
sudo usermod -aG docker your-user
your-userの部分をあなたのユーザー名に変えてください。例えばpiにします。
Raspberry Piを再起動します。
バージョンを確認してみます。
$ 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-rc8
  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

この記事公開時では19.03.2でした。

Dockerの動作確認

Dockerの動作確認をしてみます。Docker Hubには多くのコンテナのイメージが公開されています。
Docker Hub
多くのイメージはx86系CPU用になっています。つまりRaspberry Piなどarm系CPUでは動きません。ですが最近はarm系のイメージを持つものが増えてきているようです。イメージを検索してタグに"ARM”とあればRaspberry Piでも動かせるでしょう。
今回は動作確認に良く使われる"hello-world"を動かしてみます。
hello-world | Docker Hub
タグに"ARM"とありますね。
ターミナルで次のコマンドを入れます。
docker run hello-world
Dockerが動けば次のように出力されます。
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1eda109e4da: Pull complete 
Digest: sha256:451ce787d12369c5df2a32c85e5a03d52cbcef6eb3586dd03075f3034f10adcd
Status: Downloaded newer image for 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.
    (arm32v7)
 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 ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
一番初めはhello-worldのイメージが無いためイメージをDocker Hubからpullしてくれます。
そしてコンテナを展開して実行結果を表示しています。

Dockerのアンインストール

Dockerのアンインストールをしてみます。
Dockerはスクリプトでインストールしたのでアンインストールの方法が良くわかりません。ですが、Docker Documentationに書かれている方法で良いようです。
sudo apt purge docker-ce
sudo rm -rf /var/lib/docker
sudo apt autoremove --purge
そしてRaspberry Piを再起動します。

まとめ

今回はRaspberry PiのOS RaspbianへDockerをインストールしました。できるだけ公式の説明に沿っています。
【2020/1/8 追記: Tinker BoardのTinkerOSにも同じ手順でDockerをインストールできます。】

Raspberry Pi zeroでは今回の手順が使えません。Pi 3などとバイナリに完全な互換性がないためです。docker-ceのバージョンを古いものに戻すなどの解決策があるようですが私は未検証です。
関連記事:Raspbian BusterなRPi ZeroにDockerをインストールする

Dockerをなぜ使うのか?ピンとこない方も多いと思います。環境設定がさらにややこしくなるだけと感じるかもしれません。
アプリ毎に独立のコンテナを作り連携させて行くと便利さがわかるようになります。
負荷分散をしてくれるアプリと一緒に使うと複数のコンピュータをクラスタリングして使うこともできます。

次回は複数のコンテナの管理をしやすくするDocker-composeのインストール方法を書いてみます。

コメント

最近のコメント

Threaded Recent Comments will be here.