プログラムを作成する際、開発はVS CodeのRemote Containerで行うことが多いのですが、開発用に作ったコンテナイメージを管理するプライベートリポジトリが欲しくなったので構築してみました。
手順は簡単ですが、備忘録として構築方法をこの記事にまとめています。
リポジトリの構築には、Docker Hubにあるオフィシャルイメージ「registry」を使用して、Docker上に構築しました。
このイメージだけではUIが無いので、WebUIとして「docker-registry-ui」も使用します。
また、おまけとして「mkcert」で作成した自己署名証明書を使ってTLSに対応する構成としました。
構築に使用した環境は下記となります。
早速ですが、ディレクトリ構成と使用したdocker-compose.yml、nginx.confの中身です。
./dockre-registry ├── docker-compose.yml └── nginx ├── nginx.conf ├── registry.example-key.pem └── registry.example.pem
docker-compose.yml
services: registry: image: registry:2.8.1 restart: always volumes: - ./registry-data:/var/lib/registry networks: - registry-ui-net ui: image: joxit/docker-registry-ui:latest restart: always environment: - SINGLE_REGISTRY=true - REGISTRY_TITLE=My Private Docker Registry volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf - ./nginx/_wildcard.muro.lan.pem:/etc/nginx/certs/registry.example.pem # mkcertで作成した証明書のファイル名に置き換え - ./nginx/_wildcard.muro.lan-key.pem:/etc/nginx/certs/registry.example-key.pem # mkcertで作成した秘密鍵のファイル名に置き換え ports: - 80:80 - 443:443 depends_on: - registry networks: - registry-ui-net networks: registry-ui-net:
nginx.conf
server { listen 443 ssl; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ssl_certificate /etc/nginx/certs/registry.example.pem; # mkcertで作成した証明書のファイル名に置き換え ssl_certificate_key /etc/nginx/certs/registry.example-key.pem; # mkcertで作成した秘密鍵のファイル名に置き換え root /usr/share/nginx/html; # disable any limits to avoid HTTP 413 for large image uploads client_max_body_size 0; location /v2 { # Do not allow connections from docker 1.5 and earlier # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents if ($http_user_agent ~ "^(docker\/1\.(3|4|5(.[0-9]-dev))|Go ).*$" ) { return 404; } proxy_pass http://registry:5000; } } server { listen 80; location / { # Force HTTPS return 301 https://$host$request_uri; } }
「docker-registry」ディレクトリに移動し、以下のコマンドでサービスを起動します。
# フォアグラウンドで起動 docker compose up #バックグラウンドで起動 docker compose up -d
ブラウザから「https://サーバー名 or IPアドレス」にアクセスすると、下図のようなページが表示されます。
お試しで適当なコンテナイメージを1つアップロードしたので、「my-ubuntu」という名前のイメージが表示されています。

今回はDockerのプライベートリポジトリの構築について簡単にまとめてみました。
ある程度Dockerに慣れている前提でいろいろと端折っていますが、自己署名証明書をDockerに読み込ませる手順や、mkcertの使い方についても気が向いたときに加筆するつもりです。
趣味で扱った技術や作成したアプリについて、備忘録として書いていきます。