目次
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: 暗号署名によるイメージ検証機能強化
目次
- 概要
- ECR Public が解決する課題
- 主な特徴
- アーキテクチャ
- コアコンポーネント
- ECR Public ギャラリー
- リポジトリの作成・操作
- マルチアーキテクチャ イメージ
- 主要ユースケース
- 設定・操作の具体例
- 類似サービス比較表
- ベストプラクティス
- トラブルシューティング
- 2025-2026 最新動向
- 学習リソース・参考文献
- 実装例
- チェックリスト
- まとめ
概要
初心者向けメモ: 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:アーキテクチャ明示(マニフェストリスト)
4. ECR Public Gallery
OSS コミュニティ発見・検索プラットフォーム。
掲載メリット
- 検索可能性向上
- Verified Account バッジで信頼向上
- コミュニティからのフィードバック
ECR Public ギャラリー
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
学習リソース・参考文献
公式ドキュメント
-
Amazon ECR Public User Guide
-
Amazon ECR API Reference(Public)
-
ECR Public Gallery
-
Docker buildx Documentation
-
AWS Container Security Best Practices
AWS ブログ・サンプルコード
-
AWS Containers Blog - ECR Articles
- マルチアーキテクチャ・セキュリティ記事
-
aws-samples on GitHub - ECR Examples
- サンプルコード・テンプレート
関連プロダクト・リソース
-
Docker Official Images on ECR Public
public.ecr.aws/docker/library/
-
AWS Samples Containers
-
CNCF Artifact Hub
- https://artifacthub.io/ (Helm・OCI イメージカタログ)
実装例
例 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