Docker : Docker-Registry を利用する2015/12/17 |
Docker-Registry をインストールして、Docker イメージのプライベートレジストリサーバーを構築します。
|
|
[1] | Registry イメージを Pull して起動します。 Registry コンテナーでは、イメージは [/var/lib/regstry] 配下に保管されるため、 該当領域を永続化させるために、ホスト側の [/var/lib/docker/registry] をマウントして利用するよう設定します。 |
[root@dlp ~]# docker pull registry:2 [root@dlp ~]# mkdir /var/lib/docker/registry [root@dlp ~]# docker run -d -p 5000:5000 \
-v /var/lib/docker/registry:/var/lib/registry \ registry:2 996e918ad31f0ebcbc27187c18b5f70876e840f5c447ad370844b984bdcf0f9d[root@dlp ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 996e918ad31f registry:2 "/entrypoint.sh /etc…" 8 seconds ago Up 7 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp peaceful_solomon # Firewalld 稼働中の場合はポート許可 [root@dlp ~]# firewall-cmd --add-port=5000/tcp --permanent [root@dlp ~]# firewall-cmd --reload
# 新規作成 または 追記 # HTTP 通信を許可するホストを追加 (デフォルトは HTTPS) { "insecure-registries": [ "docker.internal:5000", "dlp.srv.world:5000" ] }
[root@client ~]#
systemctl restart docker
# タグ付けして Registry に Push [root@client ~]# docker tag nginx dlp.srv.world:5000/nginx:my-registry [root@client ~]# docker push dlp.srv.world:5000/nginx:my-registry [root@client ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest f0b8a9a54136 11 days ago 133MB dlp.srv.world:5000/nginx my-registry f0b8a9a54136 11 days ago 133MB |
[2] | 自己署名の証明書で HTTPS を有効にする場合の設定です。 証明書はリンク先の通り [/etc/pki/tls/certs] 配下に作成している場合の例です。 |
[root@dlp ~]# docker run -d -p 5000:5000 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/server.key \ -v /etc/pki/tls/certs:/certs \ -v /var/lib/docker/registry:/var/lib/registry \ registry:2 2d8b71a51f374154f5d8d331ca8b9d0a773598defcbf264834d71a2cec466b8b # 他の Docker クライアントホストから Registry を利用する場合はクライアント側の設定変更 # HTTPS のため [insecure-registries] の登録は不要 # 自己署名の証明書の場合は Registry 側の証明書を取得して要配置
[root@client ~]#
mkdir -p /etc/docker/certs.d/dlp.srv.world:5000 [root@client ~]# scp dlp.srv.world:/etc/pki/tls/certs/server.crt /etc/docker/certs.d/dlp.srv.world:5000/ca.crt
# タグ付けして Registry に Push [root@client ~]# docker tag centos dlp.srv.world:5000/centos:my-registry [root@client ~]# docker push dlp.srv.world:5000/centos:my-registry [root@client ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE dlp.srv.world:5000/centos my-registry 300e315adb2f 5 months ago 209MB centos latest 300e315adb2f 5 months ago 209MB |
[3] | Let's Encrypt 等の正規の証明書で HTTPS を有効にする場合の設定です。 証明書はリンク先の通り [/etc/letsencrypt] 配下に取得している場合の例です。 |
[root@dlp ~]# docker run -d -p 5000:5000 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.pem \ -e REGISTRY_HTTP_TLS_KEY=/certs/privkey.pem \ -v /etc/letsencrypt/live/dlp.srv.world:/certs \ -v /var/lib/docker/registry:/var/lib/registry \ registry:2 28512a4b96d93172b7af66f6b7263fdbff8d729a76659c8b955c60800b557f4f # 他の Docker クライアントホストから Registry を利用する場合は以下 # 正規の証明書で HTTPS の場合はデフォルト設定で利用可 # タグ付けして Registry に Push [root@client ~]# docker tag nginx dlp.srv.world:5000/my-nginx:my-registry [root@client ~]# docker push dlp.srv.world:5000/my-nginx:my-registry [root@client ~]# docker images dlp.srv.world:5000/my-nginx my-registry 7ce4f91ef623 6 days ago 133MB nginx latest 7ce4f91ef623 6 days ago 133MB |
[4] | Basic 認証を有効にする場合は以下のように設定します。 |
[root@dlp ~]#
yum install httpd-tools
# 任意のユーザー登録 # [-c] オプションは新規ファイル作成のため初回のみ付与 [root@dlp ~]# htpasswd -Bc /etc/docker/.htpasswd admin
New password:
Re-type new password:
Adding password for user admin
[root@dlp ~]# docker run -d -p 5000:5000 \
-v /var/lib/docker/registry:/var/lib/docker/registry \
-v /etc/docker:/auth \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/.htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
registry:2
77c4b2db35af4cf06b09474062767ec9c6e5b19465d6686843d847a35f464a2f
[root@dlp ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 77c4b2db35af registry:2 "/entrypoint.sh /etc…" 17 seconds ago Up 16 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp great_curran # 任意のノードでアクセス確認 # [htpasswd] で登録したユーザーで認証 [root@client ~]# docker login dlp.srv.world:5000
Username: admin
Password:
Login Succeeded
[root@client ~]# docker pull dlp.srv.world:5000/nginx:my-registry [root@client ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE dlp.srv.world:5000/nginx my-registry 62d49f9bab67 4 weeks ago 133MB |
Sponsored Link |