Raspberry Pi で Docker を使ってみる!

記事
IT・テクノロジー

Raspberry Pi で Docker を使ってみる!

Raspberry Pi に Ubuntu のサーバー版の OS をインストールしたので、Raspberry Pi で Docker を使ってみることにしました。初回のこの記事では、Raspberry Pi に Docker をインストールする方法を紹介します。


Docker を利用すると便利

この連載でも以前紹介していますが、Docker は仮想化技術の一つで、コンテナ(Container)を利用して、独立した環境でアプリを動作させるための仕組みです。

この仕組みを利用すると、開発環境と実際に公開する環境による微妙な違いが原因で起こる問題を最小限にできます。また、Docker が利用できる環境ならば、簡単に開発したアプリを基本的に変更なしで公開できるので便利です。

簡単に言うと Docker イメージという決められた仕組みの「箱のような物(container)」にアプリの中身を詰め込んで、「その箱」を実行するという仕組みです。予め必要な物は箱に詰めてあるので、必要なのは箱を渡すだけで済むという仕組みです。

まずはインストール
既に、Raspberry Pi には Ubuntu のサーバー版(64-bit)がインストールされているので、SSH でリモートアクセスして、設定を行います。

まずは、SSH で Raspberry Pi にアクセスします。

$ ssh ubuntu@192.168.86.242
を実行して、パスワードを入力します。

続いて、Docker をインストールします。

以下のコマンドを実行します。 (利用している、Ubuntu は、LTS の 20.04 版です)

$ sudo apt-get update
$ sudo sudo apt-get install apt-transport-h t t p s ca-certificates curl gnupg lsb-release
$ curl -fsSL h t t p s://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] h t t p s://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
これで Docker が Raspberry Pi にインストールされました。

試しに、Docker で実行してみる

インストールが正常にできたかを確認するために、公開されている Docker イメージを実行してみます。

$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
93288797bd35: Pull complete
Digest: sha256:37a0b92b08d4919615c3ee023f7ddb068d12b8387475d64c622ac30f45c29c51
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.
    (arm64v8)
 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:
 h t t p s://hub.docker.com/

For more examples and ideas, visit:
 h t t p s://docs.docker.com/get-started/

$
のように実行できればインストールは完了です。

標準のインストールでは、Docker の実行には、管理者(スーパーユーザー)の権限が必要なので、一般ユーザーでも実行可能なように設定を変更します。

$ sudo groupadd docker
groupadd: group 'docker' already exists
$ sudo usermod -aG docker $USER
$ newgrp docker
これで Docker の実行が一般ユーザー(設定したユーザー)でも可能になります。

試しに、システムの Docker イメージの一覧を見てみます。

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 18e5af790473 4 weeks ago 9.14kB
$
これで一通りの設定は完了です。

実は失敗しています。。。

ちなみに、上で紹介した手順は、特に問題なく設定できます。 しかし、実は、上のステップが最初は上手く動作しないで、試行錯誤しました。

既にお気づきの方もいらっしゃると思いますが、最初に Raspberry Pi にインストールした Ubuntu のサーバー版の OS は、「21.10」という最新版出した。ところが、このバージョンで上の処理をすると上手くインストールできませんでした。

どうも、ARM64 版の Docker のレポジトリの 21.04 版のバイナリが無いようでエラーになります。色々インターネットで検索しましたが、一通り微妙に違う手順ですが基本的にエラーメッセージは同じで上手くインストールができませんでした。

本来の目的は、Ubuntu のサーバ版の OS で Docker を利用することなので、Ubuntu のバージョンを LTS(安定リリース版)の「20.04」に変えて上のステップを実行してインストールを行いました。全く同じ手順ですが、「20.04」版の OS ならば問題なくインストールできます。

ポイントは「lsb_release -cs」の実行結果を使って、リポジトリを取得しますがこのコマンドは Ubuntu の OS のコードネームを取得するコマンドで「20.04」の場合は、

$ lsb_release -cs

focal
$
のように「focal」というコードネームを返します。これが、21.10 の場合は、「Impish」という値になります。どうやら、この Impish 対応がまだできていないようでインストールがうまくいかないようです。(2021 年 10 月 22 日現在)

まとめ

この記事は、Raspberry Pi に Ubuntu のサーバー版の OS(20.04)をインストールして、Docker を利用するための準備の紹介です。

当初、21.10 の最新版の OS を入れて試しましたが、Docker のレポジトリが最新版対応していないようで、少しインターネットで検索して色々試しましたが、レポジトリが見つからないというエラーが発生するため、20.04 LTS をインストールし直して設定を行いました。

最新版の方が良いイメージがありますが、リリース直後の場合、パッケージによっては対応の遅れもあるようで上手くいかいない場合があります。 最新版を使う理由が特別にあるわけでは無いので、今回は、OS のバージョンを「20.04」に変えてインストールを行いました。

外部のパッケージを利用する場合は、場合によっては OS の最新版対応が直ぐに行われるわけでは無いので注意が必要です。安定板(LTS)はそうした問題が少なく、多少は古くても選択する価値があります。 実験用ではなくて、開発用として利用する際も、同様でいたずらに最新版にするよりは、まずは、テスト用の環境で試してから利用するとこうした、モジュールの対応の遅れによる問題を最小限にすることができます。

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す