Raspberry Piに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 DocumentationDebianへのインストールの説明のページです。基本はDockerのレポジトリの場所を追加してレポジトリからインストールします。ですがRaspbianではこの方法はまだ使えません。
Raspbian users cannot use this method!Raspbianの場合は"convenience scripts"を使うのが唯一のアプローチだそうです。
For Raspbian, installing using the repository is not yet supported. You must instead use the convenience script.
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-worldDockerが動けば次のように出力されます。
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のインストール方法を書いてみます。
コメント
コメントを投稿