ローカルに構築したリモートのDocker Registryにアクセスする

Docker Registryをローカル環境に構築した時のメモです。
主に、オライリー本の『Docker』を参考にしています。

Virtual BoxでUbuntu 18.04を動かし、そこにDockerをインストールしました。
手順は、Docker Registryのインストールからを示しています。

また、ホストOSとUbuntu 18.04は、
21022番ポート→22番ポート
25000番ポート→5000番ポート、
でポートフォワーディングしています。

■Docker Registryのインストール&起動

$ docker run -d -p 5000:5000 registry:2.7.1

■自己証明書の作成
domain.key:秘密鍵
domain.crt:証明書

$ sudo su -
$ mkdir registry_certs
$ openssl req -newkey rsa:4096 -nodes -sha256 -keyout registry_certs/domain.key -x509 -days 365 -out registry_certs/domain.crt
〜国名やら名前やらを聞かれてくるので適当に応える〜
※Common Nameには、サーバー名を入力する。

Common Name以外は、テキトーに入力しても構わないようです。
/etc/hostsに

127.0.0.1 hogehoge

と書いてあれば(というか、書いておき)、Common Nameには『hogehoge』と入力します。
また、ホストOSの/etc/hostsにも、『127.0.0.1 hogehoge』を書いておきます(要するに、このサーバーにアクセスする際の名前を入力する)。
以上の作業で、registry_certsディレクトリにdomain.crt(証明書ファイル)とdomain.key(秘密鍵)が作成されます。

■証明書のコピー

# mkdir -p /etc/docker/certs.d/hogehoge:5000
# cp registry_certs/domain.crt /etc/docker/certs.d/hogehoge:5000/ca.crt
# service docker restart ※証明書をコピーしたら、Dockerを再起動する。

※オライリー本『Docker』によれば、CA証明書をDockerデーモンにコピーしなければならないとあるが、なぜかコピーしなくてもリモートのDocker Registryにアクセスできてしまっている(要調査)。

■Docker Registryの起動

$ docker run -d -p 5000:5000 -v $(pwd)/registry_certs:/certs -e \
REGISTRY_HTTP_TLS_CERTFICATE=/certs/domain.crt -e \
REGISTRY_HTTP_TLS_KEY=/certs/domain.key --restart=always --name registry registry:2.6

■Docker Hubからイメージをプルし、ローカルのRegistryにプッシュする

$ docker pull ruby:2.6.1
$ docker tag ruby:2.6.1 hogehoge:5000/ruby:2.6.1
$ docker push hogehoge:5000/ruby:2.6.1

■ホストOSからイメージをプルしてみる

$ docker pull hogehoge:25000/ruby:2.6.1

よし、成功。