re:inventing the wheel

それでも車輪は回っている

docker-registryによるプライベートDockerリポジトリの作成

こちらの記事を元に、認証付きのプライベートなDockerリポジトリを作成しました。 リンクにも書かれていますが、docker loginはSSL通信とBasic認証が必要なため、オレオレCA+Nginxの環境を試してみました。

SSLプライベート認証局の作成

CentOS7のデフォルトのOpenSSLを利用して作成しました。設定ファイルは/etc/pki/tls/openssl.cnfにあります。

オレオレCAの作成

私の旧ブログで簡単に説明していますが、折をみて改めてオレオレCAの記事は書きたいと思います。

1
2
3
4
5
6
7
# DEFALT_CA_PATH=/etc/pki/CA
# mkdir -p ${DEFALT_CA_PATH}/private
# mkdir -p ${DEFALT_CA_PATH}/newcerts
# touch ${DEFALT_CA_PATH}/index.txt
# touch ${DEFALT_CA_PATH}/serial
# echo 00 > ${DEFALT_CA_PATH}/serial
# openssl req -new -x509 -newkey rsa:2048 -out ${DEFALT_CA_PATH}/cacert.pem -keyout ${DEFALT_CA_PATH}/private/cakey.pem

オレオレCAをOSで信頼できる証明局する

DockerAIPを実行するサーバ(Dockerホスト)側で信頼された認証局である必要があるため、オレオレCAの証明書をOSに登録します。 ※ここでは、オレオレCAとDockerホストが同じマシンにあることを前提にしています。

1
# cat /etc/pki/CA/cacert.pem >> /etc/ssl/certs/ca-bundle.crt

なお、設定後はDockerデーモンを再起動する必要があります。

1
# systemctl restart docker

docker-registryを起動する

とりあえず、docker-registryのQuickStartに従って立ち上げます。

1
# docker run -d -p 5000:5000 registry

Nginxの設定を行う。

Nginxのインストール

好みの問題ですが、Nginxはオフィシャルのyumリポジトリからインストールしました。 参考: Official Red Hat/CentOS packages

1
2
3
4
5
6
7
# vi /etc/yum.repos.d/nginx

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

docker-registry用のNginxリバースプロクシの設定ファイルを配置する

GitHubのリポジトリよりNginxの設定ファイルを配置します。

1
2
3
# git clone https://github.com/docker/docker-registry
# cp docker-registry/contrib/nginx/nginx_1-3-9.conf /etc/nginx/conf.d/docker-registry-nginx.conf
# cp docker-registry/contrib/nginx/docker-registry.conf /etc/nginx/

設定をコピーしらた、/etc/nginx/conf.d/docker-registry-nginx.confのServerNameなどを自分の環境にあわせ修正します。

SSLの鍵ファイル作成

鍵ファイルはNginxの設定に合わせて作成しています。

1
2
3
# mkdir -p /etc/ssl/private/
# mkdir -p /etc/ssl/csr
# openssl req -new -keyout /etc/ssl/private/docker-registry -out /etc/ssl/csr/docker-registry

お決まりですが、鍵ファイルのパスフレーズを解除します。

1
2
# mv /etc/ssl/private/docker-registry /etc/ssl/private/docker-registry.org
# openssl rsa -in /etc/ssl/private/docker-registry.org -out //etc/ssl/private/docker-registry

オレオレCAで認証します。

1
# openssl ca -out /etc/ssl/certs/docker-registry -infiles /etc/ssl/csr/docker-registry

ベーシック認証用のファイルを作成

1
2
# yum -y install httpd-tools
# htpasswd -c /etc/nginx/docker-registry.htpasswd hoge

Nginxの起動

1
2
3
# nginx -t
# systemctl enable nginx
# systemctl start nginx

プライベートDockerリポジトリにログインする

ここでは、NginxでServerName(SSLサーバ証明書も)をlocalhostとした時の例です。

1
# docker login https://localhost

以上です。