2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「Dockerはわかるけど…」から卒業!AWSでコンテナを動かすための30日集中講座 - Day 10: コンテナイメージを管理する:AWS ECR (Elastic Container Registry) の使い方

Last updated at Posted at 2025-08-17

Day 10: コンテナイメージを管理する:AWS ECR (Elastic Container Registry) の使い方 📦

皆さん、こんにちは!30日集中講座、Day 10へようこそ。

昨日、ECSの全体像を学び、コンテナをAWS上で動かすためには、Dockerイメージを**ECR (Elastic Container Registry)**に保存する必要があることを知りました。ECRは、Docker Hubのようなプライベートなコンテナレジストリサービスで、AWSのサービスとシームレスに連携します。

今日は、ECRを実際に使って、ローカルで作成したDockerイメージをクラウドにプッシュする方法をステップ・バイ・ステップで学びましょう。


1. なぜECRを使うのか?

ECRは、単なるコンテナイメージの保管庫ではありません。

  • AWSとの深い統合: ECRはIAMと連携しているため、コンテナイメージへのアクセス権限を細かく制御できます。また、ECSやEKSといったコンテナサービスから簡単にイメージをPullできます。
  • 高いセキュリティ: イメージの脆弱性スキャン機能が組み込まれており、安全性を高めることができます。
  • プライベートレジストリ: チーム内でのみ共有したい機密性の高いイメージを安全に保管できます。

2. 前提条件の確認

ECRへのプッシュを始める前に、以下の準備が完了しているか確認してください。

  • AWS CLI: AWS CLIがインストールされ、認証設定が完了していること。CLIを使ってアカウントIDを確認できます。
    aws sts get-caller-identity --query Account --output text
    
  • Docker: ローカルにDockerがインストールされ、コンテナイメージがビルド済みであること。
  • IAM権限: ECRにイメージをプッシュ・プルする権限が必要です。学習用途であれば**AmazonEC2ContainerRegistryFullAccess**ポリシーをIAMユーザーに付与してください。本番環境では、最小権限の原則に従い、プッシュ・プル専用のカスタムポリシーを用意することが推奨されます。

3. ECRへのイメージプッシュ 3ステップ

ECRへのイメージプッシュは、以下の3つのシンプルなステップで行います。

ステップ1: ECRリポジトリを作成する

まず、イメージを保存するための「リポジトリ」を作成します。コンソールからGUIで作成する方法の他に、AWS CLIを使うとより早く作成できます。

# CLIでリポジトリを作成
aws ecr create-repository --repository-name my-first-app --region ap-northeast-1

--regionで利用するリージョンを明示的に指定しましょう。

ステップ2: Dockerクライアントに認証情報を付与する

ECRにプッシュするためには、認証が必要です。AWS CLIを使って、DockerクライアントにECRへのアクセス権限を渡します。

aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin <YOUR-ACCOUNT-ID>.dkr.ecr.ap-northeast-1.amazonaws.com
  • ap-northeast-1: あなたが利用するリージョンに置き換えてください。
  • <YOUR-ACCOUNT-ID>: あなたのAWSアカウントIDに置き換えてください。

このコマンドは、一時的な認証情報(トークン)を発行し、DockerがECRにログインできるようにします。このトークンは12時間で期限切れになるため、その後は再度認証コマンドを実行する必要があります。

ステップ3: Dockerイメージにタグを付けてプッシュする

次に、ローカルでビルドしたDockerイメージに、ECRリポジトリのURIをタグ付けします。タグは、バージョン管理を行う上で非常に重要です。

# ローカルイメージに新しいタグを付ける
docker tag my-local-image:latest <YOUR-ACCOUNT-ID>.dkr.ecr.ap-northeast-1.amazonaws.com/my-first-app:latest

# ECRにイメージをプッシュ
docker push <YOUR-ACCOUNT-ID>.dkr.ecr.ap-northeast-1.amazonaws.com/my-first-app:latest

タグ付けのベストプラクティス

本番環境では、latestタグだけを使うのは危険です。バージョン管理の観点から、セマンティックバージョニングに従ってタグ付けすることが推奨されます。

# セマンティックバージョニングの例
# ローカルイメージにバージョンタグとlatestタグを付ける
docker tag my-local-image:latest <ECR-URI>/my-first-app:1.0.0
docker tag my-local-image:latest <ECR-URI>/my-first-app:latest

# それぞれをECRにプッシュ
docker push <ECR-URI>/my-first-app:1.0.0
docker push <ECR-URI>/my-first-app:latest

4. 実践!Day 6のアプリをECRにプッシュしてみよう

Day 6で作成したPythonアプリケーションをECRにプッシュする完全なコマンド例です。

cd my-web-app
docker build -t my-web-app:latest .
aws ecr create-repository --repository-name my-web-app
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin <YOUR-ACCOUNT-ID>.dkr.ecr.ap-northeast-1.amazonaws.com
docker tag my-web-app:latest <YOUR-ACCOUNT-ID>.dkr.ecr.ap-northeast-1.amazonaws.com/my-web-app:latest
docker push <YOUR-ACCOUNT-ID>.dkr.ecr.ap-northeast-1.amazonaws.com/my-web-app:latest

5. トラブルシューティング

よくあるエラーと解決法を知っておきましょう。

  • ❌ エラー: no basic auth credentials
    • ✅ 対策: 認証トークンが期限切れになっています。aws ecr get-login-password ...コマンドを再実行してDockerに再ログインしてください。
  • ❌ エラー: AccessDeniedException
    • ✅ 対策: IAMユーザーに必要なECR権限が付与されているか確認しましょう。
  • ❌ エラー: Client.TimeoutまたはConnect timeout
    • ✅ 対策: ネットワークの問題が考えられます。ファイアウォールやVPNがECRへの接続を妨げていないかチェックします。

6. ベストプラクティスと次へのステップ

  • コスト最適化: ECRはストレージ料金(約$0.025/GB/月)とデータ転送料金がかかります。古いイメージを自動で削除するライフサイクルポリシーを設定することで、コストを抑えられます。
  • セキュリティスキャン: ECRにプッシュされたイメージは、スキャンを有効化することで、自動的に脆弱性スキャンが行われ、リスクが検知されます。
  • 次回への準備: 明日は、コンテナを実行するためのAWSの基盤であるEC2とFargateの比較について、より深く掘り下げます。

次回の予告
Day 11: ECSクラスターの設計:EC2とFargate、どちらを選ぶべき?

それでは、また明日お会いしましょう!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?