コンテナレジストリとは?イメージが存在する場所
コンテナレジストリはイメージの倉庫であり配布拠点です - イメージをそこへ push し、そこから pull します。
イメージをビルドしたら、それを保存する場所と、runner やサーバーと共有する手段が必要になります。それがレジストリです。イメージをリポジトリとタグで push・pull するための標準的な API を公開しており、コンテナを出荷するあらゆる CI/CD pipeline の中心的な構成要素です。
リポジトリとタグ
レジストリはリポジトリ(例: acme/web)を保持し、各リポジトリはタグ付きのイメージ(acme/web:1.4、acme/web:latest)を保持します。完全な参照はレジストリのホスト、リポジトリ、タグを組み合わせたものです: ghcr.io/acme/web:1.4。
push と pull
builder はイメージを docker push で上げ、runner やサーバーは docker pull で下ろします。イメージは layer 構造かつコンテンツアドレス指定であるため、欠けている layer のみが転送され、繰り返しの pull が高速に保たれます。
認証
レジストリは通常プライベートなので、まずトークンや短命な認証情報を使って docker login(またはそれを代行する action)でログインします。CI では、長命なパスワードよりも OIDC やスコープ付きトークンを優先しましょう。
一般的なレジストリ
- Docker Hub - デフォルトのパブリックレジストリ。
- GHCR - GitHub Container Registry、GitHub のアイデンティティに紐づく。
- Amazon ECR、Google Artifact Registry、Azure ACR - クラウドネイティブなレジストリ。
- Self-hosted(Harbor、オープンソースの registry)で完全な制御を。
CI におけるレジストリ
典型的な pipeline はイメージをビルドし、それをレジストリへ push し、deploy ステップがそれを pull します。レジストリの push と pull は一時的なネットワークエラーに遭遇することがあります。マネージド runner(Latchkey)はそうしたレジストリの不調を自動でリトライするため、不安定なアップロードが build 全体を失敗させることはありません。
重要なポイント
- レジストリはイメージをリポジトリとタグで保存・配布します。
- pull では欠けている layer のみが転送されるため、繰り返しの pull は高速です。
- CI 認証にはスコープ付きで短命な認証情報(OIDC やトークン)を使いましょう。