Docker : Registry を利用する2024/06/13 |
Registry をインストールして、Docker イメージのプライベートレジストリーサーバーを構築します。 |
|
[1] | Registry をインストールします。 |
root@dlp:~# apt -y install docker-registry
|
[2] | Registry の設定です。 HTTP 通信 且つ 認証なしの場合の設定です。 |
root@dlp:~#
vi /etc/docker/registry/config.yml # 認証なしの場合は以下のように [auth] セクションはコメント化 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] #auth: # htpasswd: # realm: basic-realm # path: /etc/docker/registry health: storagedriver: enabled: true interval: 10s threshold: 3
root@dlp:~#
systemctl restart docker-registry
# 任意のクライアントからアクセス可能か確認 # HTTP 通信の場合はそれぞれのクライアントノードに [insecure-registries] の登録が必要
root@dlp:~#
vi /etc/docker/daemon.json # 新規作成 または 追記 # HTTP を許可するホストを追加 { "insecure-registries": [ "docker.internal:5000", "dlp.srv.world:5000" ] }
root@dlp:~#
systemctl restart docker
# ローカルホストから [push] root@dlp:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE srv.world/ubuntu-apache2 latest d987da01ec6c About an hour ago 225MB srv.world/ubuntu-nginx latest f3f6605bb20c About an hour ago 123MB ubuntu latest 17c0145030df 13 days ago 76.2MBroot@dlp:~# docker tag ubuntu dlp.srv.world:5000/ubuntu:my-registry root@dlp:~# docker push dlp.srv.world:5000/ubuntu:my-registry root@dlp:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE srv.world/ubuntu-apache2 latest d987da01ec6c About an hour ago 225MB srv.world/ubuntu-nginx latest f3f6605bb20c 2 hours ago 123MB dlp.srv.world:5000/ubuntu my-registry 17c0145030df 13 days ago 76.2MB ubuntu latest 17c0145030df 13 days ago 76.2MB # 他ノードから [pull] root@node01:~# docker pull dlp.srv.world:5000/ubuntu:my-registry root@node01:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE dlp.srv.world:5000/ubuntu my-registry 17c0145030df 13 days ago 76.2MB |
[3] | Basic 認証を有効にする場合は以下のように設定します。 |
root@dlp:~#
apt -y install apache2-utils
root@dlp:~#
vi /etc/docker/registry/config.yml # [auth] セクションをコメント解除して passwd ファイルのパスを指定
.....
.....
auth:
htpasswd:
realm: basic-realm
path: /etc/docker/registry/.htpasswd
.....
.....
# 任意のユーザー登録 # [-c] オプションは新規ファイル作成のため初回のみ付与 root@dlp:~# htpasswd -Bc /etc/docker/registry/.htpasswd ubuntu New password: Re-type new password: Adding password for user ubuntu
root@dlp:~#
systemctl restart docker-registry
# 任意のノードでアクセス確認 # 認証していない場合はエラー root@node01:~# docker pull dlp.srv.world:5000/ubuntu:my-registry Error response from daemon: Head http://dlp.srv.world:5000/v2/nginx/manifests/my-registry: no basic auth credentials # [htpasswd] で登録したユーザーで認証 root@node01:~# docker login dlp.srv.world:5000
Username: ubuntu
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
root@node01:~# docker pull dlp.srv.world:5000/ubuntu:my-registry root@node01:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE dlp.srv.world:5000/ubuntu my-registry 17c0145030df 13 days ago 76.2MB |
[4] | HTTPS でアクセスする場合 且つ Let's Encrypt 等から取得した有効な SSL/TLS 証明書
を使用する場合は以下のように設定します。 当例では、SSL 証明書はリンク先の例のように [/etc/letsencrypt/live/dlp.srv.world] 配下に取得している前提で進めます。 |
root@dlp:~# mkdir /etc/docker/certs.d root@dlp:~# cp -p /etc/letsencrypt/live/dlp.srv.world/{fullchain,privkey}.pem /etc/docker/certs.d/ root@dlp:~# chown docker-registry /etc/docker/certs.d/{fullchain,privkey}.pem
root@dlp:~#
vi /etc/docker/registry/config.yml # [http] セクション配下に [tls] セクションを追記して証明書を指定
.....
.....
http:
addr: :5000
tls:
certificate: /etc/docker/certs.d/fullchain.pem
key: /etc/docker/certs.d/privkey.pem
headers:
X-Content-Type-Options: [nosniff]
.....
.....
root@dlp:~#
systemctl restart docker-registry
# 任意のノードでアクセス確認 # HTTPS のため [insecure-registries] の登録不要 root@node01:~# docker pull dlp.srv.world:5000/ubuntu:my-registry root@node01:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE dlp.srv.world:5000/ubuntu my-registry 17c0145030df 13 days ago 76.2MB |
[5] | HTTPS でアクセスする場合 且つ 自己署名の SSL/TLS 証明書
を使用する場合は以下のように設定します。 当例では、SSL 証明書はリンク先の例のように [/etc/ssl/private] 配下に証明書を作成している前提で進めます。 |
root@dlp:~# mkdir -p /etc/docker/certs.d/dlp.srv.world:5000 root@dlp:~# cp -p /etc/ssl/private/server.{crt,key} /etc/docker/certs.d/dlp.srv.world:5000/ root@dlp:~# chown docker-registry /etc/docker/certs.d/dlp.srv.world:5000/server.{crt,key}
root@dlp:~#
vi /etc/docker/registry/config.yml # [http] セクション配下に [tls] セクションを追記して証明書を指定
.....
.....
http:
addr: :5000
tls:
certificate: /etc/docker/certs.d/dlp.srv.world:5000/server.crt
key: /etc/docker/certs.d/dlp.srv.world:5000/server.key
headers:
X-Content-Type-Options: [nosniff]
.....
.....
root@dlp:~#
systemctl restart docker-registry
# 任意のノードでアクセス確認 # 自己署名の証明書の場合は以下のようにエラーになる root@node01:~# docker pull dlp.srv.world:5000/ubuntu:my-registry Error response from daemon: Get https://dlp.srv.world:5000/v2/: x509: certificate signed by unknown authority # registry サーバー側の証明書をクライアント側にコピーする root@node01:~# mkdir -p /etc/docker/certs.d/dlp.srv.world:5000 root@node01:~# scp root@dlp.srv.world:"/etc/docker/certs.d/dlp.srv.world:5000/server.crt" /etc/docker/certs.d/dlp.srv.world:5000/ca.crt docker pull dlp.srv.world:5000/ubuntu:my-registry root@node01:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE dlp.srv.world:5000/ubuntu my-registry 17c0145030df 13 days ago 76.2MB |
Sponsored Link |