Ubuntu 26.04 で内部向けのコンテナイメージ配布基盤を作る場合、Docker Registry を用意しておくと、検証環境や閉域環境でもイメージの push / pull を管理しやすくなります。
この記事では、Ubuntu パッケージの docker-registry を使い、TLS、Basic 認証、保存ディレクトリ、/etc/docker/registry/config.yml、docker-registry.service の確認ポイントをまとめます。
docker-registryパッケージの導入/etc/docker/registry/config.ymlの基本設定- TLS 証明書と Basic 認証の考え方
/var/lib/docker-registryの保存領域docker push/docker pullの確認
| 対象 OS | Ubuntu 26.04 Server |
|---|---|
| パッケージ | docker-registry |
| サービス | docker-registry.service |
| 設定ファイル | /etc/docker/registry/config.yml |
| 保存先 | /var/lib/docker-registry |
| 既定ポート例 | 5000/tcp |
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-registryTLS 証明書を確認する
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-registryBasic 認証を設定する
内部向け 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/.htpasswdconfig.yml を作成する
/etc/docker/registry/config.yml では、保存先、HTTP 待ち受け、TLS、htpasswd 認証、ストレージヘルスチェックを定義します。
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/_catalogpush と 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 だけでなく、ログ、ディスク使用量、バックアップまで確認しておくと運用で困りにくくなります。

