昔に買ったRaspberry Pi4 Model Bを特に使い道なく放置していたのですが、4core/8GB mem/256GB SSDとそれなりにスペック積んでいて勿体無いので実験がてらDockerの実行環境として使ってみようと思います。
ラズパイ構築した時の内容はラズパイにUSBメモリ型SSDを生やすにまとまってます。

またラズパイ上のDockerdに手元のMacbookからアクセスできるようにします。
macbookからdocker cliで操作し、ラズパイ上に起動したコンテナに接続するような状態を目指します。 img

設定

ラズパイ側

まずはdockerをインストールします。
公式の手順を参考にdocker-ceをインストールします。

[pi@raspi4b01] ~
% docker version
Client: Docker Engine - Community
 Version:           23.0.1
 API version:       1.42
 Go version:        go1.19.5
 Git commit:        a5ee5b1
 Built:             Thu Feb  9 19:46:40 2023
 OS/Arch:           linux/arm
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          23.0.1
  API version:      1.42 (minimum version 1.12)
  Go version:       go1.19.5
  Git commit:       bc3805a
  Built:            Thu Feb  9 19:46:40 2023
  OS/Arch:          linux/arm
  Experimental:     false
 containerd:
  Version:          1.6.16
  GitCommit:        31aa4358a36870b21a992d3ad2bef29e1d693bec
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
[pi@raspi4b01] ~
%

その後にdocker daemonがTCPでのアクセスを受け付けるように設定します。
デフォルトだと unix:///var/run/docker.sockでアクセスを受け付ける設定になっていますが、これに追加してTCPでもアクセスを受け付けるようにします。

まずはdockerの設定ファイルにtcpで受付ける設定を追加します。ファイルがなければ新規作成します。
ref: dockerd daemon

[pi@raspi4b01] ~
% cat /etc/docker/daemon.json
{
  "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"]
}
[pi@raspi4b01] ~
%

またdocker-ceで設定されたsystemdはデフォルトでサービス起動時に -Hオプションを指定しているためそのままだとdocker.jsonのhostsの設定が反映されません。

[pi@raspi4b01] ~
% grep ExecStart /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
[pi@raspi4b01] ~
%

そのためsystemdの設定を追加します。

[pi@raspi4b01] ~
% cat /etc/systemd/system/docker.service.d/docker.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
[pi@raspi4b01] ~
%

この状態でdocker再起動すると設定反映され、TCPでアクセスできる状態になります。

[pi@raspi4b01] ~
% sudo systemctl daemon-reload
[pi@raspi4b01] ~
% sudo systemctl restart docker.service
[pi@raspi4b01] ~
% ss state LISTENING | grep 2376
tcp    0        4096                                                  *:2376                                               *:*
[pi@raspi4b01] ~
%

macbook側

macbook側ではcontextを追加してラズパイ上のdocker daemonへの接続情報を教えてあげます。

[koh@Kohs-MacBook-Pro-M1-387] ~
% docker context create raspi4b01 --description "raspi4b01" --docker "host=tcp://raspi4b01.local:2376"
[koh@Kohs-MacBook-Pro-M1-387] ~
% docker context use raspi4b01
[koh@Kohs-MacBook-Pro-M1-387] ~
% docker context show
raspi4b01
[koh@Kohs-MacBook-Pro-M1-387] ~
% docker container ls
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[koh@Kohs-MacBook-Pro-M1-387] ~
%

動作確認

実際にコンテナを動かして動作確認します。
といってもやることは普通の操作と変わらないです。

nginxのコンテナを起動してcurlでアクセスしてあげると普通に繋がります。

[koh@Kohs-MacBook-Pro-M1-387] ~
% docker run -p 8080:80 --name some-nginx -d nginx
612e1f262ce0f72ab51c8eac6fdb1863daa62051af5b9fc35ec82cf127b3e133
[koh@Kohs-MacBook-Pro-M1-387] ~
% curl http://raspi4b01.local:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[koh@Kohs-MacBook-Pro-M1-387] ~
%

ラズパイ側から確認してもコンテナ起動していることがわかります。

[pi@raspi4b01] ~
% docker container ls
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                                   NAMES
612e1f262ce0   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp, :::8080->80/tcp   some-nginx
[pi@raspi4b01] ~
%

まとめ

とりあえずできたので使い勝手を試していきたい。

Share on: このエントリーをはてなブックマークに追加