LoginSignup
28
30

More than 5 years have passed since last update.

Registry v2 と Let's Encryptを使ってDocker Private Repositoryを構築

Last updated at Posted at 2016-05-31

Registry (https://github.com/docker/distribution) を利用すると誰でも気軽にDocker Private Repositoryを立てられるが, DockerはHTTPによる通信を非セキュアとして通常は許可しておらず, HTTPSによる通信を行なうためには証明書を取得する必要があり, そのためのコストが高かった.

ここで面倒臭くなって大分長いことPrivate Repositoryを立てたいと思いつつ, 実行に移せていなかったのだが, そういえば Let's Encrypt が 2016年4月に正式公開されたはずなので, これを利用すればオレオレ証明書をでっちあげたりしなくても, 簡単に認証付きRegistryを立てられることに気付いた.

この記事ではLet's Encrypt を利用して, 証明書を発行し,
認証付きのRegistryを立てる方法を簡単に紹介したいと思う.

準備

  • Docker 1.6.0 or newer
  • 自分の管理下にあるドメイン (この記事では <my-domain> と表記.)

Let's Encrypt から 証明書をひっぱってくる

参考記事: http://qiita.com/sawanoboly/items/9fdde1707de5e975dd15

以下のコマンドで/etc/letsencrypt以下に証明書をひっぱってくる.

docker run -it --rm -p 80:80 -p 443:443 \
  -v "/etc/letsencrypt:/etc/letsencrypt" \
  -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
  quay.io/letsencrypt/letsencrypt:latest certonly --standalone

mkdir -p certs
cp /etc.letsencrypt/live/<my-domain>/fullchain.pem certs/<mydomain>.crt
cp /etc.letsencrypt/live/<my-domain>/privkey.pem certs/<mydomain>.key

ドメイン名やメイルアドレスを聞かれるので素直に答える. 処理が終了すると /etc/letsencrypt/live/<my-domain>/ 以下に必要なファイルが生成されている.
今回はこのうち, fullchain.pemprivkey.pem を利用する.

htpasswd を生成

パスワード認証用にhtpasswdを生成しておく. <user><password> にはそれぞれパスワード認証に使うidとpasswordを設定. > が混ざって読みづらくなってしまって申しわけない.

mkdir auth
docker run --entrypoint htpasswd registry:2 -Bbn <user> <password> > auth/htpasswd

Registryコンテナを立ち上げる

ホストのファイルシステム上のディレクトリ /tmp/registry で コンテナイメージを管理することにしよう.

docker run -d -p 5000:5000 --restart=always --name registry \
  -f /tmp/registry:/var/lib/registry
  -v `pwd`/auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  -v `pwd`/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/<my-domain>.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/<my-domain>.key \
  registry:2

Ok.

Registryコンテナから push/pull してみる

docker pull ubuntu # これは今回作ったRegistryからpullしているわけではない. 実際なんでもいい.
docker login <my-domain>:5000 # user/password を聞かれるので素直に答える
docker tag ubuntu <my-domain>:5000/ubuntu

# push
docker push <my-domain>:5000/ubuntu

# pull
docker pull <my-domain>:5000/ubuntu

Ok.

参考資料

https://docs.docker.com/registry/
https://docs.docker.com/registry/deploying/

28
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
30