Docker CE 24.0.7とDocker Resistry 2.8.3をAlmaLinux 8.5へ導入してDockerイメージを一元管理
目次
概要
(仕事と関係なく)趣味で作成したアプリケーションは、家庭内のRaspberry Pi 4B(以下ラズパイ4)上で稼働しているGitLabでソース管理しています。 動作テストのためにJenkinsのジョブを実行するとWebサーバのDockerイメージを作成し、コンテナとして起動してテストできるようにしています。 Dockerイメージをビルドする際に利用するベースとなるDockerイメージはDocker Hubから取得して、 ビルドしたDockerイメージもDocker Hubに登録して管理しています。 よく考えると一連の開発サイクルの中でDocker Hubだけローカル(家庭内)にない環境を利用しているので、 勉強がてらローカルにDocker Registryを構築して利用してみようと思い立ったので試してみました。 まだ本格運用は始めていませんが、一通り試して問題なさそうなところまでは確認しました。
構成
サーバ構成
ハードウェア
Raspberry Pi 4 Model B - 8GB
OS
AlmaLinux release 8.5 (Arctic Sphynx) aarch64
ソフトウェア・パッケージ
- yum-utils-4.0.21-23.el8.alma.1.noarch.rpm
- docker-ce-24.0.7-1.el8.aarch64.rpm
- docker-ce-cli-24.0.7-1.el8.aarch64.rpm
- containerd.io-1.6.26-3.1.el8.aarch64.rpm
- docker-buildx-plugin-0.11.2-1.el8.aarch64.rpm
- docker-compose-plugin-2.21.0-1.el8.aarch64.rpm
- registry:2.8.3 ※Dockerイメージ
環境構築
インストール
旧バージョンのDockerのインストール確認
これからDockerをインストールする環境に旧バージョンのDockerがインストールされていないかを確認します。 もし旧バージョンのDockerがインストール済みの場合は先に削除してからインストールを行います。 今回利用したラズパイ4用のAlmaLinux 8.5のOSのイメージではDockerと名の付くパッケージはインストールされていなかったため、削除処理は不要でした。
# dnf list installed | grep docker ←何も表示されなかった
yum-utilsのインストール
Docker CEのリポジトリを登録してdnfコマンドでDocker CEをインストールできるようにするために、 yum-utilsパッケージをインストールします。yum-utilsの中にリポジトリを登録するためのユーティリティが含まれています。
# dnf -y install yum-utils
gitlab_gitlab-ce 274 B/s | 862 B 00:03
gitlab_gitlab-ce-source 399 B/s | 862 B 00:02
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing:
yum-utils noarch 4.0.21-23.el8.alma.1 baseos 75 k
Upgrading:
dnf noarch 4.7.0-19.el8.alma baseos 542 k
dnf-data noarch 4.7.0-19.el8.alma baseos 156 k
dnf-plugins-core noarch 4.0.21-23.el8.alma.1 baseos 76 k
json-c aarch64 0.13.1-3.el8 baseos 39 k
libdnf aarch64 0.63.0-17.el8_9.alma baseos 626 k
libsolv aarch64 0.7.20-6.el8 baseos 341 k
python3-dnf noarch 4.7.0-19.el8.alma baseos 549 k
python3-dnf-plugins-core noarch 4.0.21-23.el8.alma.1 baseos 262 k
python3-hawkey aarch64 0.63.0-17.el8_9.alma baseos 108 k
python3-libdnf aarch64 0.63.0-17.el8_9.alma baseos 705 k
yum noarch 4.7.0-19.el8.alma baseos 208 k
Installing dependencies:
python3-systemd aarch64 234-8.el8 baseos 79 k
Transaction Summary
========================================================================================================================
Install 2 Packages
Upgrade 11 Packages
Total download size: 3.7 M
Downloading Packages:
(1/13): python3-systemd-234-8.el8.aarch64.rpm 285 kB/s | 79 kB 00:00
(2/13): yum-utils-4.0.21-23.el8.alma.1.noarch.rpm 227 kB/s | 75 kB 00:00
(3/13): dnf-4.7.0-19.el8.alma.noarch.rpm 1.3 MB/s | 542 kB 00:00
(4/13): dnf-plugins-core-4.0.21-23.el8.alma.1.noarch.rpm 628 kB/s | 76 kB 00:00
(5/13): dnf-data-4.7.0-19.el8.alma.noarch.rpm 793 kB/s | 156 kB 00:00
(========== 中略 ==========)
Verifying : python3-hawkey-0.63.0-3.el8.aarch64 20/24
Verifying : python3-libdnf-0.63.0-17.el8_9.alma.aarch64 21/24
Verifying : python3-libdnf-0.63.0-3.el8.aarch64 22/24
Verifying : yum-4.7.0-19.el8.alma.noarch 23/24
Verifying : yum-4.7.0-4.el8.noarch 24/24
Upgraded:
dnf-4.7.0-19.el8.alma.noarch dnf-data-4.7.0-19.el8.alma.noarch
dnf-plugins-core-4.0.21-23.el8.alma.1.noarch json-c-0.13.1-3.el8.aarch64
libdnf-0.63.0-17.el8_9.alma.aarch64 libsolv-0.7.20-6.el8.aarch64
python3-dnf-4.7.0-19.el8.alma.noarch python3-dnf-plugins-core-4.0.21-23.el8.alma.1.noarch
python3-hawkey-0.63.0-17.el8_9.alma.aarch64 python3-libdnf-0.63.0-17.el8_9.alma.aarch64
yum-4.7.0-19.el8.alma.noarch
Installed:
python3-systemd-234-8.el8.aarch64 yum-utils-4.0.21-23.el8.alma.1.noarch
Complete!
ストレージ・ドライバの利用に必要なパッケージのインストール
公式ガイドではストレージ・ドライバの利用に必要なパッケージもインストールするよう記載がありますので、インストールします。 yum-utilsと一緒にインストールして良いのですが、インストールし忘れていたので追加でインストールしました。。
# dnf -y install device-mapper-persistent-data lvm2
gitlab_gitlab-ce 257 B/s | 862 B 00:03
gitlab_gitlab-ce-source 283 B/s | 862 B 00:03
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing:
device-mapper-persistent-data aarch64 0.9.0-7.el8 baseos 801 k
lvm2 aarch64 8:2.03.14-13.el8_9 baseos 1.6 M
Upgrading:
device-mapper aarch64 8:1.02.181-13.el8_9 baseos 374 k
device-mapper-libs aarch64 8:1.02.181-13.el8_9 baseos 398 k
Installing dependencies:
device-mapper-event aarch64 8:1.02.181-13.el8_9 baseos 270 k
device-mapper-event-libs aarch64 8:1.02.181-13.el8_9 baseos 269 k
libaio aarch64 0.3.112-1.el8 baseos 31 k
lvm2-libs aarch64 8:2.03.14-13.el8_9 baseos 1.1 M
Transaction Summary
========================================================================================================================
Install 6 Packages
Upgrade 2 Packages
Total download size: 4.8 M
Downloading Packages:
(1/8): device-mapper-event-1.02.181-13.el8_9.aarch64.rpm 1.1 MB/s | 270 kB 00:00
(2/8): device-mapper-event-libs-1.02.181-13.el8_9.aarch64.rpm 998 kB/s | 269 kB 00:00
(3/8): device-mapper-persistent-data-0.9.0-7.el8.aarch64.rpm 2.6 MB/s | 801 kB 00:00
(4/8): libaio-0.3.112-1.el8.aarch64.rpm 396 kB/s | 31 kB 00:00
(5/8): lvm2-libs-2.03.14-13.el8_9.aarch64.rpm 7.6 MB/s | 1.1 MB 00:00
(========== 中略 ==========)
Verifying : lvm2-libs-8:2.03.14-13.el8_9.aarch64 6/10
Verifying : device-mapper-8:1.02.181-13.el8_9.aarch64 7/10
Verifying : device-mapper-8:1.02.177-10.el8.aarch64 8/10
Verifying : device-mapper-libs-8:1.02.181-13.el8_9.aarch64 9/10
Verifying : device-mapper-libs-8:1.02.177-10.el8.aarch64 10/10
Upgraded:
device-mapper-8:1.02.181-13.el8_9.aarch64 device-mapper-libs-8:1.02.181-13.el8_9.aarch64
Installed:
device-mapper-event-8:1.02.181-13.el8_9.aarch64 device-mapper-event-libs-8:1.02.181-13.el8_9.aarch64
device-mapper-persistent-data-0.9.0-7.el8.aarch64 libaio-0.3.112-1.el8.aarch64
lvm2-8:2.03.14-13.el8_9.aarch64 lvm2-libs-8:2.03.14-13.el8_9.aarch64
Complete!
Docker CEのリポジトリを登録
yum-utilsパッケージに含まれているyum-config-managerユーティリティでDocker CEのリポジトリを登録します。
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
# ls -l /etc/yum.repos.d/
total 32
-rw-r--r--. 1 root root 941 Nov 11 2021 almalinux-ha.repo
-rw-r--r--. 1 root root 883 Nov 11 2021 almalinux-plus.repo
-rw-r--r--. 1 root root 961 Nov 11 2021 almalinux-powertools.repo
-rw-r--r--. 1 root root 978 Oct 6 2021 almalinux-raspberrypi.repo
-rw-r--r--. 1 root root 2660 Nov 11 2021 almalinux.repo
-rw-r--r--. 1 root root 1022 Nov 11 2021 almalinux-resilientstorage.repo
-rw-r--r--. 1 root root 1919 Jan 5 12:57 docker-ce.repo ←登録された
-rw-r--r--. 1 root root 773 Sep 10 12:52 gitlab_gitlab-ce.repo
Docker CEのインストール
Docker CEをインストールします。一昔前の公式ガイドに載っていたインストール対象パッケージを指定していますが、 2024年1月5日時点ではdocker-ceパッケージだけを指定すればあとは依存関係で勝手にインストールされるようです (インストールしたあとに公式ガイドの手順が変わっていることに気づきましたがおそらく害はないと思います)。
# dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Docker CE Stable - aarch64 69 kB/s | 49 kB 00:00
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing:
containerd.io aarch64 1.6.26-3.1.el8 docker-ce-stable 26 M
docker-buildx-plugin aarch64 0.11.2-1.el8 docker-ce-stable 11 M
docker-ce aarch64 3:24.0.7-1.el8 docker-ce-stable 15 M
docker-ce-cli aarch64 1:24.0.7-1.el8 docker-ce-stable 6.3 M
docker-compose-plugin aarch64 2.21.0-1.el8 docker-ce-stable 11 M
Installing dependencies:
container-selinux noarch 2:2.221.0-1.module_el8.9.0+3643+9234dc3b appstream 68 k
fuse-common aarch64 3.3.0-17.el8 baseos 21 k
fuse-overlayfs aarch64 1.12-1.module_el8.9.0+3643+9234dc3b appstream 63 k
fuse3 aarch64 3.3.0-17.el8 baseos 52 k
fuse3-libs aarch64 3.3.0-17.el8 baseos 90 k
libcgroup aarch64 0.41-19.el8 baseos 67 k
libslirp aarch64 4.4.0-1.module_el8.8.0+3615+3543c705 appstream 65 k
slirp4netns aarch64 1.2.1-1.module_el8.9.0+3643+9234dc3b appstream 54 k
Installing weak dependencies:
docker-ce-rootless-extras aarch64 24.0.7-1.el8 docker-ce-stable 4.3 M
Enabling module streams:
container-tools rhel8
Transaction Summary
========================================================================================================================
Install 14 Packages
Total download size: 74 M
Installed size: 315 M
Downloading Packages:
(1/14): fuse-common-3.3.0-17.el8.aarch64.rpm 130 kB/s | 21 kB 00:00
(2/14): fuse3-3.3.0-17.el8.aarch64.rpm 210 kB/s | 52 kB 00:00
(3/14): fuse3-libs-3.3.0-17.el8.aarch64.rpm 310 kB/s | 90 kB 00:00
(4/14): libcgroup-0.41-19.el8.aarch64.rpm 467 kB/s | 67 kB 00:00
(5/14): container-selinux-2.221.0-1.module_el8.9.0+3643+9234dc3b.noarch.rpm 519 kB/s | 68 kB 00:00
(========== 中略 ==========)
Verifying : docker-buildx-plugin-0.11.2-1.el8.aarch64 10/14
Verifying : docker-ce-3:24.0.7-1.el8.aarch64 11/14
Verifying : docker-ce-cli-1:24.0.7-1.el8.aarch64 12/14
Verifying : docker-ce-rootless-extras-24.0.7-1.el8.aarch64 13/14
Verifying : docker-compose-plugin-2.21.0-1.el8.aarch64 14/14
Installed:
container-selinux-2:2.221.0-1.module_el8.9.0+3643+9234dc3b.noarch
containerd.io-1.6.26-3.1.el8.aarch64
docker-buildx-plugin-0.11.2-1.el8.aarch64
docker-ce-3:24.0.7-1.el8.aarch64
docker-ce-cli-1:24.0.7-1.el8.aarch64
docker-ce-rootless-extras-24.0.7-1.el8.aarch64
docker-compose-plugin-2.21.0-1.el8.aarch64
fuse-common-3.3.0-17.el8.aarch64
fuse-overlayfs-1.12-1.module_el8.9.0+3643+9234dc3b.aarch64
fuse3-3.3.0-17.el8.aarch64
fuse3-libs-3.3.0-17.el8.aarch64
libcgroup-0.41-19.el8.aarch64
libslirp-4.4.0-1.module_el8.8.0+3615+3543c705.aarch64
slirp4netns-1.2.1-1.module_el8.9.0+3643+9234dc3b.aarch64
Complete!
Dockerサービスの起動と自動起動設定
Dockerをインストールしたあとの初期状態では、Dockerサービスの自動起動設定が無効化されていたので、 自動起動するよう設定を変更しつつDockerサービスを起動します。
# systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) ←自動起動は無効 Active: inactive (dead) ←停止状態 Docs: https://docs.docker.com # systemctl --now enable docker Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service. # systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) ←自動起動は有効 Active: active (running) since Fri 2024-01-05 13:05:27 JST; 5s ago ←起動状態 Docs: https://docs.docker.com Main PID: 1694404 (dockerd) Tasks: 10 CGroup: /system.slice/docker.service mq1694404 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Jan 05 13:05:26 rpi4b02 dockerd[1694404]: time="2024-01-05T13:05:26.465128369+09:00" level=info msg="Firewalld: interfa> Jan 05 13:05:26 rpi4b02 dockerd[1694404]: time="2024-01-05T13:05:26.832540628+09:00" level=info msg="Loading containers> Jan 05 13:05:26 rpi4b02 dockerd[1694404]: time="2024-01-05T13:05:26.925893130+09:00" level=warning msg="WARNING: No mem> Jan 05 13:05:26 rpi4b02 dockerd[1694404]: time="2024-01-05T13:05:26.926445994+09:00" level=warning msg="WARNING: No swa> Jan 05 13:05:26 rpi4b02 dockerd[1694404]: time="2024-01-05T13:05:26.926480198+09:00" level=warning msg="WARNING: No ker> Jan 05 13:05:26 rpi4b02 dockerd[1694404]: time="2024-01-05T13:05:26.926502660+09:00" level=warning msg="WARNING: No oom> Jan 05 13:05:26 rpi4b02 dockerd[1694404]: time="2024-01-05T13:05:26.926565178+09:00" level=info msg="Docker daemon" com> Jan 05 13:05:26 rpi4b02 dockerd[1694404]: time="2024-01-05T13:05:26.927098450+09:00" level=info msg="Daemon has complet> Jan 05 13:05:27 rpi4b02 dockerd[1694404]: time="2024-01-05T13:05:27.089613829+09:00" level=info msg="API listen on /run> Jan 05 13:05:27 rpi4b02 systemd[1]: Started Docker Application Container Engine.
Dockerコマンドの確認
Dockerのインストールが終わったので、Dockerを管理するためのdockerコマンドが利用できるか確認します。 簡易的にインストール済みのDockerのバージョンを表示できるか確認します。
# docker -v Docker version 24.0.7, build afdd53b
設定
取得可能なDocker Resistryのバージョン確認
Docker ResistryはDocker HubでDockerイメージとして公開されています。 イメージ名は「registry」となっています。 docker pullで取得できますが、どのバージョンを使用するのか把握しておきたかったので、 先にDocker Hubから取得可能なDocker Registryのバージョン(タグ)を確認します。
# curl -s https://hub.docker.com/v2/repositories/library/registry/tags | sed "s/,/\n/g" | grep \"name\": | sed "s/\"//g" | cut -d ':' -f 2
latest
3.0.0-alpha.1
2.8.3 ←これが最新
2.8
2
2.8.2
2.8.2-beta.2
2.8.1
2.8.0
Docker Registry 2.8.3のDockerイメージ取得
一つ前の手順の通り、2024年1月5日時点では、アルファバージョンを除くと2.8.3が最新でした。 latestタグを指定すれば簡単に最新バージョンを取得できますが、あとから見たときにどのバージョンかわからないので、 明示的にバージョン(タグ)を指定してDockerイメージを取得することにします。
# docker pull registry:2.8.3
2.8.3: Pulling from library/registry
2c03dbb20264: Pull complete
86a63ed24dc2: Pull complete
c071d160e74f: Pull complete
121fa29fe57d: Pull complete
ceff48572bdb: Pull complete
Digest: sha256:0a182cb82c93939407967d6d71d6caf11dcef0e5689c6afe2d60518e3b34ab86
Status: Downloaded newer image for registry:2.8.3
docker.io/library/registry:2.8.3
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry 2.8.3 e56655e0dde9 5 weeks ago 24.9MB ←取得したDocker RegistryのDockerイメージ
Docker Registryのコンテナ起動
取得したDocker RegistryのDockerイメージを元にコンテナを起動します。 起動時に指定するオプションとして、Docker Registryへアクセスするときのポートは5000で、意図せずコンテナが停止した場合は常に再起動を試みる設定とします。
# docker run -d -p 5000:5000 --restart=always --name registry registry:2.8.3
a49b11c480c6c53e1514ec885deda0f3542cea5332a2d4bb73b2fbf3de9b4a28
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a49b11c480c6 registry:2.8.3 "/entrypoint.sh /etc…" About a minute ago Up About a minute 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp registry ←起動したコンテナ
動作テストで使用するDockerイメージをDocker Hubから取得
コンテナとして起動したDocker Registryが想定通りに利用できる状況かDockerイメージをpushしたりpullして確認します。 この動作テストで利用するためのDockerイメージを1つDocker Hubから取得します。 動作テストなのでどのDockerイメージでもいいのですが、今後実際の開発で利用予定のrockylinuxのDockerイメージを利用することにしました。 取得可能なバージョンを確認してそのうちの1つを取得します。
# curl -s https://hub.docker.com/v2/repositories/library/rockylinux/tags | sed "s/,/\n/g" | grep \"name\": | sed "s/\"//g" | cut -d ':' -f 2 9.3.20231119-minimal 9.3.20231119 ←Docker Hubからこのタグを取得することにする 9.3-minimal 9.3 9-minimal 9 8.9.20231119-minimal 8.9.20231119 8.9-minimal 8.9 # docker pull rockylinux:9.3.20231119 9.3.20231119: Pulling from library/rockylinux bd18ea1d57cd: Pull complete Digest: sha256:c944604c0c759f5d164ffbdf0bbab2fac582b739938937403c067ab634a0518a Status: Downloaded newer image for rockylinux:9.3.20231119 docker.io/library/rockylinux:9.3.20231119 # docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry 2.8.3 e56655e0dde9 5 weeks ago 24.9MB rockylinux 9.3.20231119 a975e8f0699b 5 weeks ago 193MB ←正常に取得された
Docker RegistryへDockerイメージの登録
一つ前の手順で取得したrockylinuxのDockerイメージをDocker Registryへ登録(push)してみます。 pull/pushでDockerイメージ名だけを指定した場合、Docker Hubに対して処理されてしまいますので、 ローカルのDocker Registryを利用する場合は接続先を明示的に指定する必要があります。 下記操作はDocker Registryのコンテナを起動しているのと同じマシン上で試しているので、接続先はlocalhostで、 ポート番号はコンテナ起動時に設定した5000としています。 先にタグを作成してDocker Registryのホスト名やIPアドレス、レジストリのポート番号を追加したうえでpushします。
# docker tag rockylinux:9.3.20231119 localhost:5000/library/rockylinux:9.3.20231119 ←タグを作成 # docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry 2.8.3 e56655e0dde9 5 weeks ago 24.9MB rockylinux 9.3.20231119 a975e8f0699b 5 weeks ago 193MB localhost:5000/library/rockylinux 9.3.20231119 a975e8f0699b 5 weeks ago 193MB ←作成されたタグ # docker push localhost:5000/library/rockylinux:9.3.20231119 ←DockerイメージをDocker Registryへ登録(push)する The push refers to repository [localhost:5000/library/rockylinux] bc4a7c7e3150: Pushed 9.3.20231119: digest: sha256:ae32ae7f54215074bd0400dd82a4d543f8bc7d7d4b205563aa50f638dd20b335 size: 529
利用方法
LAN内の異なるマシンからのDocker Registryの利用
Docker Registryの構築が終わったので、早速他のマシンから利用してみようとしたら、 いきなりエラーになってしまったので、エラー内容と回避方法も載せます。
異なるマシンからDocker Registry上のDockerイメージを取得しようとしたときのエラー
Docker Registryのコンテナを起動しているのとは異なるマシン(今回は別のラズパイ4)を使って、 Docker RegistryからDockerイメージを取得してみます。すると以下のようなエラーが出力されて失敗しました。 HTTPSで接続してきたクライアントに対してDocker RegistryがHTTPレスポンスを返したため、 通信の行きと帰りでプロトコルが異なりエラーレスポンスと判断されたようです。
# docker pull 192.168.0.109:5000/library/rockylinux:8.9.20231119
Error response from daemon: Get "https://192.168.0.109:5000/v2/": http: server gave HTTP response to HTTPS client ←エラーが出力された
Dockerに非セキュアなリポジトリとして登録
今回構築したDocker Registryは家庭内のLANに閉じた利用を想定しているため、あまりセキュリティに対してはシビアに考えず、 簡易的に非セキュアなレジストリとして設定することで問題を回避します。 設定はDocker Registry側ではなく、Docker Registryに接続して利用するクライアント側で行います。 初期状態では設定ファイル自体が存在していないので新規にファイルを作成して設定します。
# cd /etc/docker/ # ls -l total 0 # vi daemon.json
※ファイルを新規作成※
{ "insecure-registries":["192.168.0.109:5000"] }
Dockerを再起動して非セキュアなリポジトリの設定を反映
設定ファイルの作成が完了したら、Dockerサービスを再起動して設定を反映します。 今回構築したDocker Registryを利用する全クライアントで同じ設定を行う必要がありますが、 利用前提が家庭内LANなのでこれでよしとします。。
# systemctl restart docker # systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2024-01-05 16:31:03 JST; 26s ago Docs: https://docs.docker.com Main PID: 77920 (dockerd) Tasks: 10 CGroup: /system.slice/docker.service mq77920 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Jan 05 16:31:03 rpi4b03 dockerd[77920]: time="2024-01-05T16:31:03.019143778+09:00" level=info msg="Loading containers: > Jan 05 16:31:03 rpi4b03 dockerd[77920]: time="2024-01-05T16:31:03.071237566+09:00" level=warning msg="WARNING: No memor> Jan 05 16:31:03 rpi4b03 dockerd[77920]: time="2024-01-05T16:31:03.071314176+09:00" level=warning msg="WARNING: No swap > Jan 05 16:31:03 rpi4b03 dockerd[77920]: time="2024-01-05T16:31:03.071337435+09:00" level=warning msg="WARNING: No kerne> Jan 05 16:31:03 rpi4b03 dockerd[77920]: time="2024-01-05T16:31:03.071359101+09:00" level=warning msg="WARNING: No oom k> Jan 05 16:31:03 rpi4b03 dockerd[77920]: time="2024-01-05T16:31:03.071430526+09:00" level=info msg="Docker daemon" commi> Jan 05 16:31:03 rpi4b03 dockerd[77920]: time="2024-01-05T16:31:03.071571691+09:00" level=info msg="Daemon has completed> Jan 05 16:31:03 rpi4b03 dockerd[77920]: time="2024-01-05T16:31:03.666223851+09:00" level=info msg="[core] [Server #7] S> Jan 05 16:31:03 rpi4b03 systemd[1]: Started Docker Application Container Engine. Jan 05 16:31:03 rpi4b03 dockerd[77920]: time="2024-01-05T16:31:03.687109669+09:00" level=info msg="API listen on /run/d>
異なるマシンからDocker RegistryのDockerイメージを取得
一つ前の手順で非セキュアなリポジトリの設定を反映したマシンからDocker Registryに接続して Dockerイメージ(rockylinux:9.3.20231119)を取得してみます。 今度はエラーが出ずにDockerイメージの取得(pull)ができました。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ranocci/web latest fc7fbcb6efff 2 weeks ago 358MB
# docker pull 192.168.0.109:5000/library/rockylinux:9.3.20231119
9.3.20231119: Pulling from library/rockylinux
bd18ea1d57cd: Pull complete
Digest: sha256:ae32ae7f54215074bd0400dd82a4d543f8bc7d7d4b205563aa50f638dd20b335
Status: Downloaded newer image for 192.168.0.109:5000/library/rockylinux:9.3.20231119
192.168.0.109:5000/library/rockylinux:9.3.20231119
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ranocci/web latest fc7fbcb6efff 2 weeks ago 358MB
192.168.0.109:5000/library/rockylinux 9.3.20231119 a975e8f0699b 5 weeks ago 193MB ←正常に取得された
異なるマシンからDocker RegistryへDockerイメージを登録
Dockerイメージの取得(pull)ができたので、次は登録(push)を試します。 以下の例ではリポジトリ名 ranocci/web で、タグが latest のDockerイメージがありますので、これを登録(push)してみます。 先にタグを作成してマシン上のDockerイメージとDocker Registryを対応付けたあとでpushします。
# docker tag ranocci/web:latest 192.168.0.109:5000/ranocci/web:latest # docker images REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.0.109:5000/ranocci/web latest fc7fbcb6efff 2 weeks ago 358MB ranocci/web latest fc7fbcb6efff 2 weeks ago 358MB 192.168.0.109:5000/library/rockylinux 9.3.20231119 a975e8f0699b 5 weeks ago 193MB # docker push 192.168.0.109:5000/ranocci/web:latest The push refers to repository [192.168.0.109:5000/ranocci/web] 996da2ecf985: Pushed 7dc4aa16098b: Pushed 7e6e0a561bf5: Pushed 586b257dd773: Pushed b662d99f5910: Pushed db554ab99c16: Mounted from library/rockylinux latest: digest: sha256:4895f15d8d325164b76c2345717b661fb730097c06e86eb963cf286e85baf806 size: 1579
Docker Registryに登録されているDockerイメージの確認
構築したDocker Registryに対して library/rockylinux と ranocci/web の2つのDockerイメージを登録(push)したので、 正常に登録されているか確認します。
# curl -s http://192.168.0.109:5000/v2/_catalog ←登録されているDockerイメージ(リポジトリ)の一覧を確認 {"repositories":["library/rockylinux","ranocci/web"]} # curl -s http://192.168.0.109:5000/v2/library/rockylinux/tags/list ←library/rockylinuxのタグ一覧を確認 {"name":"library/rockylinux","tags":["9.3.20231119"]} # curl -s http://192.168.0.109:5000/v2/ranocci/web/tags/list ←ranocci/webのタグ一覧を確認 {"name":"ranocci/web","tags":["latest"]}