Docker RegistryをインストールしてSSLの設定とimageをS3に保存する設定をしてみたのでメモしておきます。
このメモは以下のドキュメントを参考にしています。
- registryのssl設定: https://docs.docker.com/registry/configuration/#/http
- registryの証明書の作成とroot caの設定: https://docs.docker.com/registry/insecure/
- client側(docker)の設定: https://docs.docker.com/engine/security/certificates/
Docker Registry v2
docker imageを管理する場合、dockerhubを使えばよいですが、privateでimageの管理がしたい場合はimageのregistryを手元に構築する必要があります。Docker Registryを使えば手元でimageの管理が出来るようになるのでインストールしてみます。
Docker Registryはdocker-distributionという名前で提供されている新しいものをインストールします。DistributionはDocker Registry 2.0という位置づけで、次の様にdocker-registryのレポジトリではdocker-distributionを使うことを推奨しています。
https://github.com/docker/docker-registry
This is DEPRECATED! Please go to https://github.com/docker/distribution
CentOS7では以下の様なパッケージ名でDocker Registryが提供されています。docker-registryは古いパッケージなので注意。
$ cat /etc/centos-release |
環境
2台のCentOS7を使ってdocker-distributionとdockerの環境を用意します。
ip | hostname | service |
---|---|---|
192.168.33.31 | docker-registry-1 | docker-registry |
192.168.33.32 | docker-1 | docker |
docker-registry
まず、docker-registryのインストールと設定をします。
$ yum -y install docker-distribution |
docker-registry <-> docker間のSSL通信で使う自己署名証明書を作成します。作成した証明書はOSで使う証明書として登録します。->
$ echo '192.168.33.31 docker-registry-1' >> /etc/hosts |
SSL証明書のCommon Name以外は適当に設定します。
作った証明書をOSで使うSSL証明書として登録します。update-ca-trust
コマンドはOSによって異なるので読み替える必要があります。ubuntuではupdate-ca-certificates
コマンドを使うみたいです。
$ cp certs/docker-registry-1.crt /etc/pki/ca-trust/source/anchors/ |
次にdocker-distributionの設定をします。ここではS3をストレージとして利用しますが、S3を使用しない場合はfilesystem
の設定を使えばローカルのストレージに保存されるようになります。
$ cat /etc/docker-distribution/registry/config.yml |
docker-distributionを起動します。
$ systemctl enable docker-distribution |
docker
docker-registryに接続するdockerをインストールします。
$ yum install -y docker |
docker-registryのホスト名を追加します。$ echo '192.168.33.31 docker-registry-1' >> /etc/hosts
docker-registryで作ったSSL証明書をOSが使うSSL証明書として登録します。dockerのドキュメントでは/etc/docker/certs.d/docker-registry-1:5000/ca.crt
に作成するように書いてあるが、/etc/docker/certs.d
以下に1つでも証明書を追加してしまうとdockerがOSのroot証明書を参照しなくなってしまいます。docker-registry以外とSSL通信が必要な場合(例えばS3とか、dockerhubへ直接通信するとき)はOSが参照する/etc/pki/ca-trust/source/anchors
以下にSSL証明書をインストールする必要があります。/etc/docker/certs.d
以下に証明書を追加したとき、root証明書が正しく読み込めていないのでS3にimageが保存できているが、pushに失敗したという謎の現象が発生したりしたので注意が必要です。
The push refers to a repository [docker-registry-1:5000/centos] |
以下のファイルにdocker-registryで作ったSSL証明書をコピーします。$ vi /etc/pki/ca-trust/source/anchors/docker-registry-1.crt
$ update-ca-trust
dockerを起動します。
$ systemctl enable docker |
動作確認
試しに、インストールしたdockerでdockerhubのimageをpullして、docker-registry-1にpushしてみます。
$ docker pull centos |
うまく設定できている場合は次の様にS3にimageが登録されていることが確認できるはずです。

おわり。