1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Docker Private Registry with Let's Encrypt on Ubuntu 20.04

Last updated at Posted at 2020-07-20

はじめに

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.

参考文献

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?