目次

Amazon ECR Public 完全ガイド v2.0

OSS コンテナイメージの公開・配信プラットフォーム

Amazon ECR Public は、「誰でも無料でコンテナイメージをプルできる公開コンテナレジストリで、OSS プロジェクト・AWS 公式イメージ配信に最適化されたサービス」 です。Docker Hub の代替として機能し、AWS インフラから低レイテンシでマルチアーキテクチャ(AMD64・ARM64)イメージを配信できます。2025-2026 年には OCI Referrer 自動同期(SBOM・署名)・Pull Through Cache 拡張(Kubernetes registry など)機能が追加され、コンテナセキュリティ・サプライチェーン検証が進化しています。本ドキュメントは初心者から実務者向けに、ECR Public の特徴・操作・2025-2026 動向を体系的に解説する包括的ガイドです。

ドキュメントの目的

本ガイドは以下を対象としています。

  • 初心者向け: ECR Public とは何か、コンテナイメージ配信の基本を学びたい方
  • OSS 開発者向け: 自分の Docker イメージを無料でコミュニティに公開したい方
  • チーム向け: Docker Hub からの移行、マルチアーキテクチャイメージビルド
  • 意思決定者向け: ECR Public vs Docker Hub vs Quay.io vs GitHub Container Registry の選定

2025-2026 年の ECR Public エコシステム

  • OCI Referrer 自動同期(2026年4月): SBOM・署名・attestation の自動キャッシュ
  • Pull Through Cache 拡張(2025年3月): Kubernetes registry・ECR-to-ECR 連携
  • スキャン機能: Trivial・Amazon Inspector 統合で脆弱性自動検知
  • マルチアーキテクチャ標準化: ARM64・x86-64 同時ビルド・配信
  • Signed Images: 暗号署名によるイメージ検証機能強化

目次

  1. 概要
  2. ECR Public が解決する課題
  3. 主な特徴
  4. アーキテクチャ
  5. コアコンポーネント
  6. ECR Public ギャラリー
  7. リポジトリの作成・操作
  8. マルチアーキテクチャ イメージ
  9. 主要ユースケース
  10. 設定・操作の具体例
  11. 類似サービス比較表
  12. ベストプラクティス
  13. トラブルシューティング
  14. 2025-2026 最新動向
  15. 学習リソース・参考文献
  16. 実装例
  17. チェックリスト
  18. まとめ

概要

初心者向けメモ: ECR Public は「Docker Hub では pull rate limit(匿名 100 回/6 時間)があり大規模環境で困る」という課題を解決するサービスです。AWS インフラからのプル制限なし、OSS 開発者は無料で自分のイメージを公開でき、Docker Hub より信頼性が高い(AWS 公式イメージ配信)という利点があります。ただし「プライベートリポジトリ用途には ECR Private を使う」「本番アプリケーション開発ならプライベート推奨」という点で使い分けが重要です。

Amazon ECR Public 公式定義:

“Amazon Elastic Container Registry Public is a managed AWS container image registry service that is secure, scalable, and reliable. You can push images to a public repository and pull them anonymously.”

このサービスを選ぶ理由

なぜ ECR Public でないといけないのか?

理由 詳細
Docker Hub のプルレート制限回避 匿名:100 回/6 時間の制限。ECR Public は AWS 環境から無制限プル
AWS インフラからの高速配信 ECS・EKS から AWS ネットワーク内でプル、低レイテンシ・低コスト
AWS 公式イメージ配信元 EKS 最適化 AMI・AWS CLI・Lambda ランタイム等の信頼できる配信元
OSS 開発者への無料提供 月 50 GB ストレージ・5 TB 転送量無料(認証済みプル)
マルチアーキテクチャ標準化 docker buildx で AMD64・ARM64 同時ビルド・配信サポート
セキュリティ・署名 暗号署名(Docker Content Trust)によるイメージ検証

具体的なユースケース

  • OSS プロジェクト(NGINX・Redis 等)のコンテナイメージ公開
  • CI/CD パイプラインで Docker Hub 代わりにベースイメージプル
  • Kubernetes Operator・Helm チャートコンテナの公開配信
  • GitHub Actions で ECR Public への自動プッシュ・公開
  • AWS 環境内での大規模イメージプル(制限なし)

ECR Public が解決する課題

課題 従来(Docker Hub) ECR Public 解決方法
プルレート制限 匿名 100 回/6 時間、認証でも制限あり AWS 環境から無制限プル
ビルド遅延 Docker Hub 代わりのレジストリ探し AWS インフラからの高速配信
信頼性 コミュニティ運用、改ざんリスク AWS インフラ・公式イメージ配信
転送量コスト インターネット経由、高コスト AWS 内部ネットワーク、低コスト
スケーラビリティ アカウント制限・リポジトリ数制限 フル AWS スケーラビリティ
マルチアーキテクチャ管理 docker manifest 手動管理が複雑 docker buildx 統合サポート
脆弱性スキャン 外部ツール必要 Amazon Inspector・Trivial 統合

主な特徴

1. パブリック リポジトリ

認証なしプル

  • 全世界から認証なしで docker pull 可能
  • DockerHub より高速・制限なし

公開ギャラリー掲載

  • gallery.ecr.aws に掲載され検索可能
  • Verified Account バッジで信頼性向上

2. マルチアーキテクチャ

サポート対象

  • x86-64(amd64)
  • ARM64(arm64)
  • 同一タグで複数アーキテクチャを自動選択

docker buildx で自動化

  • docker buildx build --platform linux/amd64,linux/arm64で同時ビルド・プッシュ

3. セキュリティ機能

Docker Content Trust(署名)

  • イメージを暗号署名して改ざん検知

Amazon Inspector 統合

  • イメージスキャン・脆弱性検知(Private ECR 対象)

OCI Referrer サポート

  • SBOM・署名・attestation の関連メタデータ自動同期

4. 無料枠

ストレージ

  • 月 50 GB 無料

転送量

  • 認証済みプル:月 5 TB 無料
  • 匿名プル:月 500 GB 無料

OSS プロジェクト の一般的な使用ではほぼ無料


アーキテクチャ

graph TD
    A["Developer<br/>GitHub / Local"]
    B["ECR Public<br/>us-east-1 only"]
    
    subgraph EcrPublicComponents["ECR Public Resources"]
        C["Public Registry<br/>AWS Account"]
        D["Public Repository<br/>my-alias/my-project"]
        E["Image Tags<br/>v1.0.0 / latest<br/>AMD64 + ARM64"]
    end
    
    subgraph Publishing["Publishing"]
        F["docker build<br/>docker buildx"]
        G["docker login<br/>aws ecr-public"]
        H["docker push<br/>docker buildx build --push"]
    end
    
    subgraph Distribution["Distribution"]
        I["gallery.ecr.aws<br/>Public Gallery"]
        J["Consumers<br/>CI/CD / EKS / Local"]
        K["docker pull<br/>No auth required"]
    end
    
    subgraph Security["Security & Metadata"]
        L["OCI Referrer<br/>SBOM / Signatures"]
        M["Image Signatures<br/>Docker Content Trust"]
        N["Amazon Inspector<br/>Vulnerability Scan"]
    end
    
    A -->|1. Develop & Build| F
    F -->|2. Login| G
    G -->|3. Push| H
    H --> C
    C --> D
    D --> E
    E -->|4. List| I
    E -->|5. Pull| K
    K --> J
    E -->|6. Attach| L
    E -->|7. Sign| M
    E -->|8. Scan| N
    
    style A fill:#e6f3ff
    style EcrPublicComponents fill:#fff0e6
    style Publishing fill:#ffe6e6
    style Distribution fill:#e6ffe6
    style Security fill:#f0e6ff

コアコンポーネント

1. Registry(レジストリ)

各 AWS アカウントに 1 つ自動作成される公開レジストリ。

エイリアス

  • 自動生成:my-alias (デフォルト)
  • プッシュ URL:public.ecr.aws/my-alias/repo-name

2. Public Repository(公開リポジトリ)

ECR Public に保存されるイメージの格納場所。

特性

  • 認証なしでプル可能
  • ギャラリー掲載オプション
  • リソースベース権限で管理

3. Image Tag(イメージタグ)

イメージの バージョン・アーキテクチャを識別。

推奨パターン

  • v1.0.0:セマンティック バージョニング
  • latest:最新バージョン
  • amd64 / arm64:アーキテクチャ明示(マニフェストリスト)

OSS コミュニティ発見・検索プラットフォーム。

掲載メリット

  • 検索可能性向上
  • Verified Account バッジで信頼向上
  • コミュニティからのフィードバック

ECR Public ギャラリー

URL: https://gallery.ecr.aws

AWS 公式イメージ

  • public.ecr.aws/amazonlinux/amazonlinux:2023
  • public.ecr.aws/aws-cli/aws-cli:latest
  • public.ecr.aws/eks/aws-load-balancer-controller:v2.6.0
  • public.ecr.aws/karpenter/karpenter:v0.33.0

コミュニティ イメージ

  • public.ecr.aws/nginx/nginx:latest
  • public.ecr.aws/docker/library/ubuntu:22.04
  • public.ecr.aws/redis/redis:7-alpine
  • public.ecr.aws/bitnami/postgres:15

Verified Account バッジ

公式・信頼できるコミュニティパブリッシャーであることを示す。


リポジトリの作成・操作

ECR Public リポジトリ作成

# us-east-1 で実行必須(ECR Public は us-east-1 のみ)
aws ecr-public create-repository \
  --repository-name my-oss-tool \
  --region us-east-1 \
  --catalog-data '{
    "description": "Lightweight CLI tool for AWS",
    "architectures": ["x86-64", "ARM 64"],
    "operatingSystems": ["Linux"],
    "logoImageBlob": "base64-encoded-png-data",
    "aboutText": "# My OSS Tool\nA cloud-native CLI tool",
    "usageText": "## Installation\ndocker run public.ecr.aws/my-alias/my-oss-tool"
  }'

Catalog Data パラメータ

パラメータ 説明
description リポジトリ説明(ギャラリーに表示)
architectures 対応アーキテクチャ
operatingSystems 対応 OS
logoImageBlob ロゴ画像(PNG Base64)
aboutText 詳細説明(Markdown)
usageText 使用方法(Markdown)

マルチアーキテクチャ イメージ

docker buildx セットアップ

# buildx インスタンス作成
docker buildx create --name mybuilder --use
docker buildx inspect mybuilder

# ビルダーを起動
docker buildx ls

マルチアーキテクチャ ビルド・プッシュ

# ECR Public ログイン
aws ecr-public get-login-password --region us-east-1 | \
  docker login --username AWS --password-stdin public.ecr.aws

# buildx で AMD64 + ARM64 同時ビルド・プッシュ
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --tag public.ecr.aws/my-alias/my-tool:v1.0.0 \
  --tag public.ecr.aws/my-alias/my-tool:latest \
  --push \
  .

Dockerfile マルチステージの例

# ビルドステージ
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -o main .

# ランタイムステージ
FROM alpine:3.18
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["./main"]

マルチアーキテクチャビルド実行

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --tag public.ecr.aws/my-alias/myapp:v1.0.0 \
  --push \
  --file Dockerfile.multiarch \
  .

主要ユースケース

1. OSS ツール配信

シナリオ

  • CLI ツール(Go・Rust・Python)を Docker コンテナ化
  • 複数プラットフォーム(Mac・Linux・Windows)をサポート
  • GitHub リリースと同期してイメージ配信

実装

# GitHub Releases と同期
git tag v1.0.0
git push origin v1.0.0

# GitHub Actions workflow
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --tag public.ecr.aws/my-alias/my-cli:${{ github.ref_name }} \
  --push \
  .

2. Kubernetes Base Image

シナリオ

  • Kubernetes Operator・Helm チャートのイメージ配信
  • マルチクラスタ環境での統一ベースイメージ

実装

# Operator イメージをビルド・配信
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --tag public.ecr.aws/my-org/my-operator:v0.10.0 \
  --push \
  .

Helm values.yaml

image:
  repository: public.ecr.aws/my-org/my-operator
  tag: v0.10.0
  pullPolicy: IfNotPresent

3. CI/CD ベースイメージ

シナリオ

  • Docker Hub からの移行
  • CI/CD パイプラインで ベースイメージを ECR Public からプル
  • プルレート制限なし

実装(GitHub Actions)

name: Build Docker Image

on:
  push:
    tags:
      - 'v*'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT }}:role/GitHubActionsRole
          aws-region: us-east-1
      
      - name: Login to ECR Public
        uses: aws-actions/amazon-ecr-login@v2
        with:
          registry-type: public
      
      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          platforms: linux/amd64,linux/arm64
          push: true
          tags: |
            public.ecr.aws/${{ secrets.ECR_ALIAS }}/my-app:${{ github.ref_name }}
            public.ecr.aws/${{ secrets.ECR_ALIAS }}/my-app:latest

4. ギャラリー掲載による配信

シナリオ

  • gallery.ecr.aws に掲載
  • 検索・発見可能性向上
  • Verified Account バッジで信頼性強化

実装

# リポジトリ作成時に catalog-data 指定
aws ecr-public create-repository \
  --repository-name my-database \
  --region us-east-1 \
  --catalog-data '{
    "description": "High-performance in-memory database",
    "architectures": ["x86-64", "ARM 64"],
    "operatingSystems": ["Linux"],
    "aboutText": "# My Database\nOptimized for cloud-native workloads",
    "usageText": "## Quick Start\ndocker run public.ecr.aws/my-alias/my-database"
  }'

5. EKS 最適化イメージの利用

シナリオ

  • AWS が提供する EKS 最適化 AMI をベースに
  • 組織独自の設定・ツールを追加

実装(Dockerfile)

FROM public.ecr.aws/eks/aws-load-balancer-controller:v2.6.0

# 追加パッケージ・設定
RUN apk add --no-cache curl jq
COPY custom-config.yaml /etc/config/
ENTRYPOINT ["./aws-load-balancer-controller"]

設定・操作の具体例

CLI 例 1:リポジトリ作成・イメージプッシュ

# us-east-1 リージョン指定必須
export AWS_REGION=us-east-1

# 1. リポジトリ作成
aws ecr-public create-repository \
  --repository-name my-app \
  --region us-east-1

# 2. レジストリ Alias 確認
aws ecr-public describe-registries --region us-east-1 | jq '.Registries[0].RegistryAlias'
# 出力例: "my-alias"

# 3. ログイン
aws ecr-public get-login-password --region us-east-1 | \
  docker login --username AWS --password-stdin public.ecr.aws

# 4. ローカルイメージのタグ付け
docker tag my-app:latest public.ecr.aws/my-alias/my-app:v1.0.0
docker tag my-app:latest public.ecr.aws/my-alias/my-app:latest

# 5. プッシュ
docker push public.ecr.aws/my-alias/my-app:v1.0.0
docker push public.ecr.aws/my-alias/my-app:latest

CLI 例 2:マルチアーキテクチャビルド・プッシュ

# buildx ビルダー確認
docker buildx ls

# buildx で multi-platform ビルド
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --tag public.ecr.aws/my-alias/my-app:v1.0.0 \
  --tag public.ecr.aws/my-alias/my-app:latest \
  --push \
  -f Dockerfile \
  .

# 進捗確認
# => exporting to image ✓
# => pushing to 2 targets ✓

CLI 例 3:イメージ情報確認

# リポジトリ内のイメージリスト
aws ecr-public describe-images \
  --repository-name my-app \
  --region us-east-1 | jq '.imageDetails'

# イメージ詳細(タグ・サイズ・作成日時)
aws ecr-public describe-images \
  --repository-name my-app \
  --image-ids imageTag=v1.0.0 \
  --region us-east-1

# イメージマニフェスト確認(マルチアーキテクチャ確認)
aws ecr-public batch-get-image \
  --repository-name my-app \
  --image-ids imageTag=v1.0.0 \
  --region us-east-1 | jq '.images[0].imageManifest | fromjson'

CLI 例 4:リポジトリポリシー設定

# リポジトリをパブリック読み取り専用に
aws ecr-public put-repository-policy \
  --repository-name my-app \
  --policy '{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": "*",
        "Action": [
          "ecr-public:GetDownloadUrlForLayer",
          "ecr-public:BatchGetImage"
        ]
      }
    ]
  }' \
  --region us-east-1

SDK 例(Python)

import boto3
import base64

client = boto3.client('ecr-public', region_name='us-east-1')

# リポジトリ作成
response = client.create_repository(
    repositoryName='my-app',
    catalogData={
        'description': 'My Application',
        'architectures': ['x86-64', 'ARM 64'],
        'operatingSystems': ['Linux'],
        'aboutText': '# My Application\nDescription here',
        'usageText': '## Usage\ndocker run ...'
    }
)

print(f"Repository: {response['repository']['repositoryUri']}")
# 出力: public.ecr.aws/my-alias/my-app

# イメージ情報取得
images = client.describe_images(
    repositoryName='my-app'
)

for image in images['imageDetails']:
    print(f"Tag: {image.get('imageTags')}, Size: {image['imageSizeInBytes']} bytes")

# イメージ削除(不要なタグ)
client.batch_delete_image(
    repositoryName='my-app',
    imageIds=[
        {
            'imageTag': 'old-tag'
        }
    ]
)

IaC 例(CloudFormation)

ECR Public は CloudFormation で AWS::ECR::PublicRepository をサポートしていないため、AWS CLI または SDK で作成。

スクリプト例

#!/bin/bash
# create-ecr-public-repo.sh

REPO_NAME="my-app"
REGION="us-east-1"

aws ecr-public create-repository \
  --repository-name $REPO_NAME \
  --region $REGION \
  --catalog-data \
    description="My Application",\
    architectures="x86-64,ARM 64",\
    operatingSystems="Linux",\
    aboutText="# My App",\
    usageText="docker run public.ecr.aws/my-alias/$REPO_NAME"

echo "Repository created: public.ecr.aws/my-alias/$REPO_NAME"

IaC 例(Terraform)

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "us-east-1"  # ECR Public は us-east-1 必須
}

resource "aws_ecr_public_repository" "example" {
  repository_name = "my-app"

  catalog_data {
    description       = "My Application"
    architectures     = ["x86-64", "ARM 64"]
    operating_systems = ["Linux"]
    about_text        = "# My Application\nDescription here"
    usage_text        = "## Usage\ndocker run public.ecr.aws/my-alias/my-app:latest"
  }

  tags = {
    Name        = "my-app"
    Environment = "production"
  }
}

output "repository_uri" {
  value       = aws_ecr_public_repository.example.repository_uri
  description = "ECR Public Repository URI"
}

類似サービス比較表

観点 ECR Public Docker Hub GitHub Container Registry Quay.io GitLab Registry
プルレート制限 なし(AWS 環境) 100 回/6 時間(匿名) GitHub Actions から無制限 限定的 GitLab から無制限
無料枠 50 GB ストレージ + 5 TB 転送 1 個プライベートリポジトリ 無制限(パブリック) 無制限(パブリック) 無制限(パブリック)
マルチアーキテクチャ docker buildx ネイティブ 手動 manifest 管理 docker buildx サポート サポート サポート
セキュリティスキャン Amazon Inspector 統合 Snyk 連携 Dependabot Clair / Quay Security Scanner Trivy / Grype
OCI Referrer 2026年4月 GA なし サポート サポート サポート
セキュリティ署名 Docker Content Trust Docker Content Trust cosign 署名 cosign 署名 cosign 署名
ギャラリー掲載 gallery.ecr.aws Docker Hub(広く掲載) GitHub Marketplace Quay.io Gallery なし
推奨用途 AWS 環境・OSS 一般的・汎用 GitHub ネイティブ エンタープライズ GitLab ネイティブ

ベストプラクティス

チェックリスト(優先順)

✅ 推奨事項

  • [ ] マルチアーキテクチャイメージ標準化 → docker buildx で AMD64 + ARM64 同時ビルド
  • [ ] セマンティック バージョニング → v1.0.0・v1.1.0 でタグ管理、latest も併用
  • [ ] 最小ベースイメージ使用 → alpine・distroless で イメージサイズ削減
  • [ ] レイヤーキャッシュ最適化 → Dockerfile の RUN コマンド削減、層の順序工夫
  • [ ] イメージ署名・SBOM 付加 → Docker Content Trust・cosign で改ざん検知
  • [ ] ギャラリー掲載情報充実 → about-text・usage-text で検索性向上
  • [ ] CI/CD 自動プッシュ → GitHub Actions・GitLab CI で タグ push 時に自動配信
  • [ ] 定期的なクリーンアップ → 不要なタグ・古いバージョン削除
  • [ ] README・ドキュメント充実 → GitHub リポジトリに Dockerfile・実行例記載
  • [ ] 脆弱性スキャン → Amazon Inspector(Private ECR)または Trivy で定期スキャン

❌ アンチパターン

アンチパターン 問題 代替
単一アーキテクチャ(x86-64 のみ) ARM64(Mac・Raspberry Pi)で実行不可 docker buildx で マルチプラットフォーム
イメージサイズが巨大(> 1 GB) プル時間・転送量増加 alpine・マルチステージビルドで削減
latest タグのみ使用 バージョン管理不可、ロールバック困難 セマンティック バージョニング併用
Dockerfile に秘密情報記載 docker history でレイヤーに残存・露出リスク Secrets Manager・ビルド引数で外部化
セキュリティ署名なし イメージ改ざんリスク、検証不可 cosign・Docker Content Trust で署名
ギャラリー情報なし 検索・発見不可、使用方法不明 about-text・usage-text 充実

トラブルシューティング

症状 原因 解決策
「認可エラー(Unauthorized)」 AWS 認証失敗、us-east-1 以外でコマンド実行 リージョンを us-east-1 に指定
「リポジトリが見つからない」 リポジトリ名入力誤り、wrong region リポジトリ名確認、us-east-1 で検索
「docker push 失敗」 AWS 認証トークン有効期限切れ aws ecr-public get-login-password 再実行
「マルチアーキテクチャビルド失敗」 docker buildx が未初期化 docker buildx create --use で初期化
「プッシュが遅い」 ネットワーク遅延、イメージサイズ巨大 イメージサイズ削減、ローカルネットワーク確認
「ギャラリーに掲載されない」 リポジトリが非公開、catalog-data 未設定 リポジトリポリシー確認、catalog-data 設定
「SBOM / 署名がスキャンされない」 OCI Referrer が古いバージョン 2026年4月以降アップデート確認
「アーキテクチャ自動選択が機能しない」 マニフェストリストが古い、キャッシュ イメージを pull --no-cache で再取得

2025-2026 最新動向

2026年4月:OCI Referrer 自動同期 GA

新機能

SBOM・署名・attestation などの関連メタデータが自動的にキャッシュ・同期される。

# OCI Referrer 確認(ListImageReferrers API)
aws ecr-public list-image-referrers \
  --repository-name my-app \
  --image-id imageTag=v1.0.0 \
  --region us-east-1

# 出力:SBOM・署名・attestation のリスト

2025年3月:Pull Through Cache 拡張

新機能

  • Kubernetes registry(registry.k8s.io)からのプル・キャッシュ
  • ECR Private からの ECR-to-ECR プル Through Cache
  • 複数上流レジストリのキャッシング
# Pull Through Cache ルール作成
aws ecr create-pull-through-cache-rule \
  --ecr-repository-prefix kubernetes-io \
  --upstream-registry-url registry.k8s.io \
  --region ap-northeast-1

2025年5月:スキャン機能(Trivy 統合)

対象

  • ECR Private での Trivy スキャン
  • ECR Public での脆弱性検知
# 脆弱性スキャン実行(ECR Private)
aws ecr start-image-scan \
  --repository-name my-app \
  --image-id imageTag=v1.0.0 \
  --region ap-northeast-1

2026年1月:署名強化(cosign ネイティブサポート)

対応

  • cosign 署名の検証
  • keyless signing(OIDC Token ベース)
# cosign で署名
cosign sign --key cosign.key public.ecr.aws/my-alias/my-app:v1.0.0

# cosign で検証
cosign verify --key cosign.pub public.ecr.aws/my-alias/my-app:v1.0.0

学習リソース・参考文献

公式ドキュメント

  1. Amazon ECR Public User Guide

  2. Amazon ECR API Reference(Public)

  3. ECR Public Gallery

  4. Docker buildx Documentation

  5. AWS Container Security Best Practices

AWS ブログ・サンプルコード

  1. AWS Containers Blog - ECR Articles

    • マルチアーキテクチャ・セキュリティ記事
  2. aws-samples on GitHub - ECR Examples

    • サンプルコード・テンプレート

関連プロダクト・リソース

  1. Docker Official Images on ECR Public

    • public.ecr.aws/docker/library/
  2. AWS Samples Containers

  3. CNCF Artifact Hub


実装例

例 1:Go CLI ツール(マルチアーキテクチャ)

Dockerfile.multiarch

# ビルドステージ
FROM golang:1.21 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags="-w -s" -o cli .

# ランタイムステージ
FROM alpine:3.18
RUN apk add --no-cache ca-certificates
COPY --from=builder /app/cli /usr/local/bin/
ENTRYPOINT ["cli"]

ビルド・デプロイスクリプト

#!/bin/bash
set -e

VERSION=${1:-v1.0.0}
ALIAS="my-alias"
REPO="my-cli"

# ECR Public ログイン
aws ecr-public get-login-password --region us-east-1 | \
  docker login --username AWS --password-stdin public.ecr.aws

# buildx でマルチプラットフォームビルド・プッシュ
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --tag public.ecr.aws/$ALIAS/$REPO:$VERSION \
  --tag public.ecr.aws/$ALIAS/$REPO:latest \
  --push \
  -f Dockerfile.multiarch \
  .

echo "Pushed: public.ecr.aws/$ALIAS/$REPO:$VERSION"

例 2:GitHub Actions での自動プッシュ

.github/workflows/publish-ecr-public.yml

name: Publish to ECR Public

on:
  push:
    tags:
      - 'v*'

jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read

    steps:
      - uses: actions/checkout@v4
      
      - name: Set up Docker buildx
        uses: docker/setup-buildx-action@v2
      
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/GitHubActionsECRPublicRole
          aws-region: us-east-1
      
      - name: Login to ECR Public
        uses: aws-actions/amazon-ecr-login@v2
        with:
          registry-type: public
      
      - name: Extract metadata
        id: meta
        run: |
          echo "version=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
      
      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          platforms: linux/amd64,linux/arm64
          file: ./Dockerfile.multiarch
          push: true
          tags: |
            public.ecr.aws/${{ secrets.ECR_ALIAS }}/my-cli:${{ steps.meta.outputs.version }}
            public.ecr.aws/${{ secrets.ECR_ALIAS }}/my-cli:latest
          labels: |
            org.opencontainers.image.title=my-cli
            org.opencontainers.image.version=${{ steps.meta.outputs.version }}

例 3:Kubernetes Operator イメージ

Dockerfile

FROM golang:1.21 AS builder
WORKDIR /workspace
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o operator .

FROM gcr.io/distroless/static:nonroot
COPY --from=builder /workspace/operator /
USER 65532:65532
ENTRYPOINT ["/operator"]

Makefile でビルド

.PHONY: docker-build-multiarch
docker-build-multiarch:
	docker buildx build \
		--platform linux/amd64,linux/arm64 \
		--tag public.ecr.aws/my-alias/my-operator:v0.10.0 \
		--push \
		.

チェックリスト

リポジトリ作成前

  • [ ] AWS アカウント・AWS CLI セットアップ
  • [ ] リージョンを us-east-1 に指定可能
  • [ ] リポジトリ名・エイリアス(自動生成)確認

イメージビルド・プッシュ前

  • [ ] Dockerfile 作成・テスト(ローカルで動作確認)
  • [ ] docker buildx セットアップ(マルチアーキテクチャ対応)
  • [ ] ECR Public ログイン(aws ecr-public get-login-password)
  • [ ] イメージタグ命名規約(セマンティック バージョニング)

プッシュ後

  • [ ] docker pull で ダウンロード可能か確認
  • [ ] gallery.ecr.aws でギャラリーに掲載されるか確認(catalog-data 設定)
  • [ ] マルチアーキテクチャ対応確認(amd64・arm64 両方プル可能)
  • [ ] ドキュメント・README 充実(GitHub・ギャラリー)

運用時

  • [ ] 月 1 回以上イメージ脆弱性スキャン実行
  • [ ] 不要なバージョンタグ削除(容量節約)
  • [ ] セマンティック バージョニング継続
  • [ ] OCI Referrer・署名機能の活用開始(2025-2026)

まとめ

Amazon ECR Public は 「OSS コンテナイメージの公開・配信プラットフォームで、Docker Hub の制限なし・AWS インフラからの低レイテンシプル・マルチアーキテクチャ標準化・セキュリティ署名を実現するサービス」 です。

ECR Public が向いている場合

  • OSS ツール・プロジェクトのコンテナイメージ配信
  • Kubernetes Operator・Helm チャート公開
  • CI/CD パイプラインのベースイメージ(Docker Hub 代替)
  • AWS 環境での大規模イメージプル(レート制限なし)

2025-2026 動向

  • OCI Referrer 自動同期(2026年4月): SBOM・署名・attestation の自動キャッシュ
  • Pull Through Cache 拡張(2025年3月): Kubernetes registry・ECR-to-ECR 統合
  • マルチアーキテクチャ標準化: docker buildx で AMD64・ARM64 同時ビルド・配信

docker buildx でマルチアーキテクチャイメージをビルド、GitHub Actions で自動プッシュ、セマンティック バージョニングで版管理、ギャラリー情報充実でコミュニティ発見性向上、OCI Referrer・署名でセキュリティ強化することで、信頼性高い OSS イメージ配信プラットフォームを構築してください。


最終更新:2026-04-27 バージョン:v2.0