Docker Registryをホストしてhtpasswdで認証する

htpasswdファイルの作成

htpasswdファイルを作成します。 registryイメージ(Distribution Registry)はbcrypt形式のパスワードのみサポートしているため、パスワードをbcrypt形式でハッシュ化する必要があります。

sudo apt install apache2-utils
mkdir auth
cd auth
htpasswd -cB htpasswd myuser

永続化ディレクトリの作成

mkdir data

docker-compose.ymlファイルの作成

services:
registry:
image: registry:2
restart: always
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
# ports:
# - "0.0.0.0:5000:5000"
volumes:
- ./data:/var/lib/registry
- ./auth:/auth

コンテナの実行

sudo docker compose up -d

コンテナのTCP 5000番ポートでDocker Registry HTTP APIがリッスンします。 このポート宛にCloudflaredやリバースプロキシを設定して、https://docker.example.comのようにサービスを公開します。

設定後、dockerコマンドから以下のように利用できます(プッシュ・プルいずれも認証が必要)。

sudo docker login -u myuser docker.example.com
sudo docker build -t docker.example.com/myuser/myimage:0.1.0 .
sudo docker push docker.example.com/myuser/myimage:0.1.0
sudo docker pull docker.example.com/myuser/myimage:0.1.0