はじめに
DockerのプライベートRegistryを作る方法。Let's Encryptも使う。
サイトでApacheやNginxなど導入すると書いてあるところがあったけど、大げさなので利用しない。
なるべくシンプルな方法を記載。
構築するregistryのURLはregistry.octopt.comとする。
certbotは次の通りインストール
$ sudo add-apt-repository ppa:certbot/certbot -y
$ sudo apt update
$ sudo apt install certbot -y
Dockerは公式のインストール方法を推奨する。
https://docs.docker.com/engine/install/ubuntu/
Docker レジストリの作成
# 以下は全部rootでやる
$ sudo su
# certbotでファイルを取得
$ certbot certonly --standalone --preferred-challenges http --non-interactive --staple-ocsp --agree-tos -m dev@octopt.com -d registry.octopt.com
# Let's Encryptの自動更新の設定
$ cat <<EOF > /etc/cron.d/letencrypt
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
30 2 * * 1 root /usr/bin/certbot renew >> /var/log/letsencrypt-renew.log && cd /etc/letsencrypt/live/registry.octopt.com && cp privkey.pem domain.key && cat cert.pem chain.pem > domain.crt && chmod 777 domain.*
EOF
# SSL certificatesのリネーム
$ cd /etc/letsencrypt/live/registry.octopt.com && \
cp privkey.pem domain.key && \
cat cert.pem chain.pem > domain.crt && \
chmod 777 domain.*
#ログインしてPushするようにする。usernameはfoouser, passwordはbazzpassとする。
$ mkdir -p /mnt/docker-registry
$ docker run --entrypoint htpasswd registry:2.7.0 -Bbn foouser bazzpass > /mnt/docker-registry/passfile
docker run -d -p 443:5000 --restart=always --name registry \
-v /etc/letsencrypt/live/registry.octopt.com:/certs \
-v /mnt/docker-registry:/var/lib/registry \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-e REGISTRY_AUTH=htpasswd \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/var/lib/registry/passfile \
registry:2.7.0
以上。
ポート443は開けておくこと。
外部から無事できているか確認してみる。
$ curl https://foouser:bazzpass@registry.octopt.com/v2/_catalog
{"repositories":[]}
がかえってこればOK
Pushしてみる
まずdocker ログインする必要がある。
$ docker login -u foouser -p bazzpass registry.octopt.com:443
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
となる。その後はPushできる。手元にあったmyalpineをpushする。pushする前に一度docker tagしてpush する
$ docker tag alpine:latest registry.octopt.com:443/myalpine
$ docker push registry.octopt.com:443/myalpine
The push refers to repository [registry.octopt.com:443/myalpine]
50644c29ef5a: Pushed
latest: digest: sha256:a15790640a6690aa1730c38cf0a440e2aa44aaca9b0e8931a9f2b0d7cc90fd65 size: 528
OK.
参考文献