手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 Docker Registry の基本設定 – 内部コンテナレジストリを用意する

関連する記事

Ubuntu 26.04 で内部向けのコンテナイメージ配布基盤を作る場合、Docker Registry を用意しておくと、検証環境や閉域環境でもイメージの push / pull を管理しやすくなります。

この記事では、Ubuntu パッケージの docker-registry を使い、TLS、Basic 認証、保存ディレクトリ、/etc/docker/registry/config.ymldocker-registry.service の確認ポイントをまとめます。

この記事で扱うこと
  • docker-registry パッケージの導入
  • /etc/docker/registry/config.yml の基本設定
  • TLS 証明書と Basic 認証の考え方
  • /var/lib/docker-registry の保存領域
  • docker push / docker pull の確認
対象 OSUbuntu 26.04 Server
パッケージdocker-registry
サービスdocker-registry.service
設定ファイル/etc/docker/registry/config.yml
保存先/var/lib/docker-registry
既定ポート例5000/tcp
参考書籍
参考書籍
Docker Deep Dive
Docker image、registry、container runtime の基本を確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見る
このリンクは Amazon アソシエイトリンクです。

Docker Registry の構成要素を確認する

Docker Registry は、コンテナイメージの manifest と layer を保存し、Docker client からの push / pull に応答するサービスです。内部向けに使う場合でも、TLS、認証、保存領域、公開範囲を先に決めておく必要があります。

  • docker-registry.service が起動している
  • TLS 証明書と秘密鍵をサービスが読める
  • htpasswd に認証ユーザーを定義している
  • /var/lib/docker-registry の容量とバックアップ方針を決めている
  • 5000 番ポートの公開範囲を制限している

docker-registry をインストールする

Ubuntu の docker-registry パッケージを導入します。導入後は systemd サービスとして管理します。

コマンド
sudo apt update
sudo apt install -y docker-registry
systemctl status docker-registry.service --no-pager

ディレクトリを用意する

設定ファイルは /etc/docker/registry、イメージ保存先は /var/lib/docker-registry に置く構成にします。保存先は容量が増えやすいため、ディスク設計とバックアップ方針を先に決めます。

コマンド
sudo install -d -o root -g root -m 0755 /etc/docker/registry
sudo install -d -o docker-registry -g docker-registry -m 0755 /var/lib/docker-registry
sudo ls -ld /etc/docker/registry /var/lib/docker-registry

TLS 証明書を確認する

Docker client から安全に接続するため、Registry には TLS 証明書を設定します。自己署名証明書や内部 CA を使う場合は、client 側にも信頼設定が必要です。

コマンド
sudo ls -l /etc/ssl/certs/registry.example.com.crt
sudo ls -l /etc/ssl/private/registry.example.com.key
sudo usermod -aG ssl-cert docker-registry
id docker-registry

Basic 認証を設定する

内部向け Registry でも、push できる利用者を制限するために Basic 認証を設定します。公開記事の例ではパスワード値を示さず、生成済みハッシュを .htpasswd に配置する流れだけを扱います。

コマンド
sudo install -o root -g root -m 0644 registry.htpasswd /etc/docker/registry/.htpasswd
sudo ls -l /etc/docker/registry/.htpasswd
sudo head -n 1 /etc/docker/registry/.htpasswd

config.yml を作成する

/etc/docker/registry/config.yml では、保存先、HTTP 待ち受け、TLS、htpasswd 認証、ストレージヘルスチェックを定義します。

/etc/docker/registry/config.yml
version: 0.1
log:
  fields:
  service: registry
storage:
  cache:
  blobdescriptor: inmemory
  filesystem:
  rootdirectory: /var/lib/docker-registry
  delete:
  enabled: true
http:
  addr: :5000
  headers:
  X-Content-Type-Options:
  - nosniff
  tls:
  certificate: /etc/ssl/certs/registry.example.com.crt
  key: /etc/ssl/private/registry.example.com.key
auth:
  htpasswd:
  realm: basic-realm
  path: /etc/docker/registry/.htpasswd
health:
  storagedriver:
  enabled: true
  interval: 10s
  threshold: 3

サービスを再起動する

設定を変更したら docker-registry.service を再起動し、状態とログを確認します。

コマンド
sudo systemctl restart docker-registry.service
sudo systemctl enable docker-registry.service
systemctl status docker-registry.service --no-pager
journalctl -u docker-registry.service --no-pager -n 100

待ち受けと API を確認する

Registry API は /v2/ で確認できます。認証が有効な場合、未認証では 401 が返り、認証後に応答が変わります。

コマンド
ss -lntp | grep 5000
curl -k -I https://registry.example.com:5000/v2/
curl -k -u admin https://registry.example.com:5000/v2/_catalog

push と pull を確認する

Docker client 側からログインし、テスト用 image を tag して push / pull を確認します。内部 CA や自己署名証明書を使う場合は、client 側の信頼設定を先に済ませます。

コマンド
docker login registry.example.com:5000
docker pull hello-world:latest
docker tag hello-world:latest registry.example.com:5000/hello-world:latest
docker push registry.example.com:5000/hello-world:latest
docker pull registry.example.com:5000/hello-world:latest

公開範囲と保存領域を確認する

Registry はイメージ配布基盤なので、公開範囲と保存領域の管理が重要です。5000 番を外部へ広く公開せず、監視、バックアップ、ディスク使用量を合わせて確認します。

コマンド
sudo nft list ruleset
du -sh /var/lib/docker-registry
find /var/lib/docker-registry -maxdepth 2 -type d | head
df -h /var/lib/docker-registry

確認ポイント

  • docker-registry パッケージが導入されている
  • docker-registry.service が active になっている
  • /etc/docker/registry/config.yml に TLS と認証を設定している
  • /etc/docker/registry/.htpasswd を root 管理にしている
  • /var/lib/docker-registry の容量とバックアップ方針を決めている
  • client 側で CA 証明書を信頼できている
  • 5000 番ポートの公開範囲を制限している

まとめ

Ubuntu 26.04 の Docker Registry 基本設定では、docker-registry を導入し、/etc/docker/registry/config.yml に storage、HTTP、TLS、htpasswd 認証、health check を定義します。

内部レジストリは便利ですが、イメージ保存領域、TLS 証明書、認証、client 側の信頼設定、5000 番ポートの公開範囲をセットで管理する必要があります。push / pull だけでなく、ログ、ディスク使用量、バックアップまで確認しておくと運用で困りにくくなります。

関連する記事
Ubuntu 26.04 Docker Registry の基本設定 – 内部コンテナレジストリを用意する

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る