Dock Stay
レジストリを選ぶ - registry の使い方・オプション・サンプル

レジストリを選ぶ - registry

Docker Hub・GHCR・ECR・GCR・Harbor などの主要レジストリを、公開/プライベート・認証方式・コスト観点で比較する。

概念図

registry diagram

構文

bash
# ログインホストはレジストリごとに異なる
docker login                                # Docker Hub
docker login ghcr.io                        # GitHub Container Registry
docker login <acct>.dkr.ecr.<region>.amazonaws.com   # AWS ECR
docker login <region>-docker.pkg.dev        # GCP Artifact Registry
docker login harbor.example.com             # Harbor

実例

GHCR は GITHUB_TOKEN で同一 Organization 内に push できる

bash
# GitHub Actions から GHCR に OIDC ではなく GITHUB_TOKEN で push
- uses: docker/login-action@v3
  with:
    registry: ghcr.io
    username: ${{ github.actor }}
    password: ${{ secrets.GITHUB_TOKEN }}

ECR は OIDC で短命クレデンシャルを受け取るのが安全

bash
# GitHub Actions から ECR に OIDC で push
- uses: aws-actions/configure-aws-credentials@v4
  with:
    role-to-assume: arn:aws:iam::123456789012:role/gha-ecr-push
    aws-region: ap-northeast-1
- uses: aws-actions/amazon-ecr-login@v2

公開レジストリ比較

代表的な公開/クラウドレジストリの特徴は以下の通り。

レジストリ ホスト 認証 強み 注意点
Docker Hub docker.io ユーザー/PAT 最大の公開レジストリ。公式イメージが豊富 無料枠は匿名 pull のレート制限(IP あたり 100 回 / 6 時間)があり CI で引っかかりやすい
GitHub Container Registry (GHCR) ghcr.io GITHUB_TOKEN / PAT GitHub との統合が強く、リポジトリの公開範囲に合わせて権限を管理できる 権限設定がリポジトリ/Org に紐付く
AWS ECR *.dkr.ecr.*.amazonaws.com AWS IAM(短命トークン) IAM と統合し、Fargate や EKS からの pull を IAM ロールで認可できる リージョン・アカウント単位の運用
GCP Artifact Registry(旧 GCR) *-docker.pkg.dev GCP IAM GCP プロジェクト単位で権限管理 リポジトリ作成・リージョン指定が必要
Azure Container Registry (ACR) *.azurecr.io Azure AD / アクセストークン Azure リソースと統合、Alibaba / Huawei にも類似サービス SKU でレプリケーション等の機能差あり
bash
# レジストリと特徴の対応
# docker.io (Docker Hub)  : 公開最大・レート制限あり
# ghcr.io                 : GitHub 連携・GITHUB_TOKEN 可
# *.dkr.ecr.*.amazonaws.com: IAM 連携・AWS 内で完結
# *-docker.pkg.dev        : GCP Artifact Registry
# *.azurecr.io            : Azure ACR

プライベートレジストリの選び方

自社運用のプライベートレジストリが必要な場合、候補は registry:2(公式オープンソース)と Harbor、JFrog Artifactory、Sonatype Nexus、AWS ECR のプライベートリポジトリなど。

registry:2 は最小限の機能(push/pull・認証)しか持たないため本格運用には辛く、UI・RBAC・脆弱性スキャン・レプリケーションが必要なら Harbor が定番。

マネージドに寄せたいなら各クラウドのレジストリが運用負担が小さい。

選定軸は、オンプレ/クラウドの要件、RBAC の粒度、脆弱性スキャン、イメージ署名(cosign)と Notation のサポート、レプリケーション、コスト、既存の ID 基盤との連携。

認証方式(PAT / OIDC / IAM)

認証は大きく 3 系統。

PAT(Personal Access Token)は GitHub・Docker Hub などで発行する長寿命の個人トークンで、設定は簡単だが漏洩時の影響が大きく、定期ローテーションが必要。

OIDC は GitHub Actions などの CI が発行する短命トークンで、信頼関係を結んだクラウド IAM(AWS、GCP、Azure)と交換して、そのジョブの間だけ有効なクレデンシャルを得る方式。

シークレット長期保管が不要になる点が大きい。

IAM は AWS・GCP などのネイティブ認可で、EC2/EKS/Cloud Run のワークロードアイデンティティから追加シークレットなしでレジストリにアクセスできる。

可能なら PAT より OIDC / IAM を優先する。

bash
# GitHub Actions -> AWS IAM (OIDC)
permissions:
  id-token: write
  contents: read
steps:
  - uses: aws-actions/configure-aws-credentials@v4
    with:
      role-to-assume: arn:aws:iam::123456789012:role/gha-ecr-push
      aws-region: ap-northeast-1
  - uses: aws-actions/amazon-ecr-login@v2

関連トピック