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

最新のDockerインストール方法を、ラズパイ専用のサイトにまとめましたので、是非ご覧ください。

【2023年最新】Raspberry PiにDockerとDocker Composeをインストールする

以下は2021年当時の内容となります。


Raspberry Pi 4 model B(メモリ8GB)を購入しました。Raspberry Pi 3と比べメモリ容量が8倍に増えたので、Dockerをインストールしてサーバーとして運用したら楽しそうだと思いました。

公式サイトを参考に、早速Dockerをインストールしてみます。

(2021/04/20 更新)
デスクトップオートログインの無効化に関するセクションを追加しました。

事前調査

Googleで「Install Docker Raspberry Pi」で検索したところ、Docker公式ドキュメントサイトにRaspberry Piへのインストール方法が載っていました。

https://docs.docker.com/engine/install/debian/

私も公式サイトに記載の通りにインストール作業を進めていきます。私はMacの環境で作業を進めますが、Windowsでも同様かと思います。

64bitのOSイメージをmicroSDカードに書き込む

Docker公式ドキュメントには64bitのOSが必要ですと書いてありましたので、以下のRaspberry Pi公式サイトから最新のRaspberry Pi OS (64bit)をダウンロードします。

https://downloads.raspberrypi.org/raspios_arm64/images/

この記事を書いた時点ではraspios_arm64-2021-04-09というディレクトリが最新でした。

イメージのzipファイルをダウンロードしたらRaspberry Pi ImagerやBalenaEtcher等のイメージ書き込みツールでmicroSDカードにイメージを書き込みます。

デスクトップオートログインの無効化

先ほど書き込んだOSはデフォルトでデスクトップに自動ログインしてくれます。Dockerを利用する場合その用途としてはサーバ利用が考えられますので、コンソールログイン(自動ログインなし)に変更します。

コンソールにてsudo raspi-configを起動し、「1 System Option」→「S5 Boot / Auto Login」→「B1 Console」を選択します。その後、<Finish>を選択し一度再起動しましょう。

コンソール
$ sudo raspi-config
1 System Optionを選択
S5 Boot / Auto Login を選択
B1 Console を選択
<Finish> を選択
<Yes> を選択し再起動する

これで次回以降コンソールで立ち上がります。

[ad]

Dockerのインストール

Dockerの公式サイトには3種類のインストール方法が記載されていますが、Installation methodsセクションには以下のように書かれています。

In testing and development environments, some users choose to use automated convenience scripts to install Docker. This is currently the only approach for Raspbian.

https://docs.docker.com/engine/install/debian/#installation-methods

Raspberry Pi OS (旧Raspbian)にインストールする場合はconvenience scriptsを利用する方法が現在の唯一の手段らしいです。従います。

Raspberry Pi OSのコンソールで以下のコマンドを実行するだけでDocker(Docker Engine -Community)のインストールが完了します。とても簡単です。

コンソール
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
# Executing docker install script, commit: 7cae5f8b0decc17d6571f9f52eb840fbc13b2737
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sh -c curl -fsSL "https://download.docker.com/linux/debian/gpg" | apt-key add -qq - >/dev/null
Warning: apt-key output should not be parsed (stdout is not a terminal)
+ sh -c echo "deb [arch=arm64] https://download.docker.com/linux/debian buster stable" > /etc/apt/sources.list.d/docker.list
+ sh -c apt-get update -qq >/dev/null
+ [ -n  ]
+ sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
+ [ -n 1 ]
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce-rootless-extras >/dev/null
+ sh -c docker version
Client: Docker Engine - Community
 Version:           20.10.6
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        370c289
 Built:             Fri Apr  9 22:46:02 2021
 OS/Arch:           linux/arm64
 Context:           default
 Experimental:      true
Server: Docker Engine - Community
 Engine:
  Version:          20.10.6
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       8728dd2
  Built:            Fri Apr  9 22:44:13 2021
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
================================================================================
To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:
    dockerd-rootless-setuptool.sh install
Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.
To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/
WARNING: Access to the remote API on a privileged Docker daemon is equivalent
         to root access on the host. Refer to the 'Docker daemon attack surface'
         documentation for details: https://docs.docker.com/go/attack-surface/
================================================================================

rootユーザ以外でもDockerを利用可能にする

Dockerはrootユーザまたはdockerグループに所属しているユーザのどちらかでしか実行できません。dockerコマンドを実行する際に毎回sudoをつけて実行するのも面倒なので、一般ユーザ(ここではpi)をdockerグループに所属させます。

コンソール
$ sudo usermod -aG docker pi

コマンド実行後にログアウトして再度ログインすれば一般ユーザでもdockerコマンドを実行することが可能になります。

テスト実行

Docker界ではお馴染みの(?)hello-worldコンテナを起動してみます。

コンソール
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
256ab8fe8778: Pull complete 
Digest: sha256:f2266cbfc127c960fd30e76b7c792dc23b588c0db76233517e1891a4e357d519
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:
 https://hub.docker.com/
For more examples and ideas, visit:
 https://docs.docker.com/get-started/

無事にhello-worldコンテナを起動することができました。

まとめ

Docker公式サイトどおりに作業を進めて特につまずくことなくDockerをインストールできました。Raspberry Pi 特有の注意点をあえて挙げるしたら以下の点くらいです。

  • OSは64bitバージョンを選択する
  • Dockerインストールの際はconvenience scriptsを利用する
  • 一般ユーザ(pi)でdockerコマンドを利用する場合はpiユーザをdockerグループに所属させる
    • その後ログアウト→ログインを忘れずに

次回はdocker-composeをインストールして使えるようにしたいと思います。

それではまた。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です