プライベートなdockerのレジストリサーバの構築
CentOS7(RHEL7)には、docker-distribution という、docker-registry のパッケージが存在するので、わざわざ docker hubから registry を取得する必要が無かった。(2017/07/10)
環境は CentOS 7.3.1611、docker-1.12.6-11
パッケージのインストール
# yum install docker-distribution
# systemctl start docker-distribution.service
# systemctl enable docker-distribution.service
これで、ポート 5000 でサービス待ちを行っている。待ち受けのポート番号やレジストリデータの待避場所を変更したい場合は、定義ファイル config.yml を変更してサービスの再起動を行えばよい。
/etc/docker-distribution/registry/config.yml
version: 0.1
log:
fields:
service: registry
storage:
cache:
layerinfo: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
リクエスト用のポート(5000)を開放する。
# firewall-cmd --add-port=5000/tcp --zone=public --permanent
# firewall-cmd --reload
# firewall-cmd --list-ports
参考
クライアント側の設定
作成したレジストリに対して、登録を実施する。ホストは docker.internal とする。ホスト名を解決するために /etc/hosts に定義を追加する。
192.168.45.131 docker.internal
内部への接続はhttpsで無くてもエラーとならないように /etc/sysconfig/docker の INSECURE_REGISTRY にhttpで接続許可するアドレスを登録し、dockerを再起動する。
/etc/sysconfig/docker
INSECURE_REGISTRY='--insecure-registry docker.internal:5000'
設定を行わないと、以下のエラーが発生する。
Get https://docker.internal:5000/v1/_ping: http: server gave HTTP response to HTTPS client
クライアントのイメージを、レジストリサーバに登録
$ docker images
docker.io/nginx 1.13.1 958a7ae9e569 5 weeks ago 109.4 MB
$ docker tag docker.io/nginx:1.13.1 docker.internal:5000/nginx:1.13.1
$ docker images
docker.internal:5000/nginx 1.13.1 958a7ae9e569 5 weeks ago 109.4 MB
docker.io/nginx 1.13.1 958a7ae9e569 5 weeks ago 109.4 MB
$ docker push docker.internal:5000/nginx:1.13.1
(略)
1.13.1: digest: sha256:41ad9967ea448d7c2b203c699b429abe1ed5af331cd92533900c6d77490e0268 size: 948
ただし、検索を行うとエラーとなる。
$ docker search docker.internal:5000/nginx:1.13.1
Error response from daemon: Unexpected status code 404
$ docker search docker.internal:5000
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
原因については不明