CentOS 7
Sponsored Link

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
# 他の Docker クライアントホストから Registry を利用する場合はクライアント側の設定変更

[root@client ~]#
vi /etc/docker/daemon.json
# 新規作成 または 追記

# 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
関連コンテンツ