自己証明書でDocker registryを構築

発端

以前から自分でビルドしたイメージを保存するためにLets Encryptの証明書を使ったdocker registryを持っていましたが、以下の理由から自己証明書を使ったものに切り替えました。

  • 外部公開する必要がない
  • 自己証明書の方がお手軽に建てられる
  • ドメイン名の縛りが無いので、LAN内で複数建てられる

作業

実際の構築はほとんどこちらの記事を参考にしました。

# mkdir certs auth data
# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt
# htpasswd -Bbn user password > auth/htpasswd
# vim docker-compose.yml
registry:
  restart: always
  image: registry:2
  ports:
    - 5000:5000
  environment:
    REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
    REGISTRY_HTTP_TLS_KEY: /certs/domain.key
    REGISTRY_AUTH: htpasswd
    REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
    REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
  volumes:
    - ./data:/var/lib/registry
    - ./certs:/certs
    - ./auth:/auth
# docker-compose up -d

これで構築は完了です。

あとは各ノードに先ほど作成したdomain.crtを配置します。

これについては公式ドキュメントが参考になりました。

domain.crtを対象ノードにコピーして、/etc/docker/certs.d/{ドメイン名:ポート}/ca.crt に配置してください。

これで自己証明書のregistryを警告なしで使えるようになります。

# docker login {ドメイン名:ポート}
(ユーザー名:パスワードを入力)
# docker pull busybox
# docker tag busybox {ドメイン名:ポート}/test
# docker push {ドメイン名:ポート}/test
# docker rmi {ドメイン名:ポート}/test
# docker pull {ドメイン名:ポート}/test

以前までinsecure registryに設定を書いていましたが、こっちの方が全然楽でいいですね。

今後はこちらの方法を使っていきたいと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です