こんにちは、フルスタックエンジニアのryuです。
今回の記事では、AWSのAmazon ECRへDockerイメージをpushする方法を解説します。
ECRは、AWS上にDockerイメージやOCIイメージを保存できるコンテナレジストリです。
ローカルで作成したDockerイメージをECRへpushしておけば、ECSやFargateなどからイメージを取得してコンテナを起動できます。
ただ、初めて使うと、
- ECRへどうやってログインするのか
docker tagは何のために必要なのかdocker pushでAccessDeniedになるのはなぜか
といった部分でつまずきやすいです。
この記事では、Dockerイメージの作成 → ECRリポジトリ作成 → 認証 → tag → push → 確認まで、初心者向けに順番に解説します。
【AWS】ECRの使い方とは?¶
ECRとは、Amazon Elastic Container Registryの略で、AWS上でコンテナイメージを保存・管理できるサービスです。
Docker Hubと似ていますが、IAMと組み合わせて権限管理できるため、ECSやFargateとも連携しやすいサービスです。
流れは次の通りです。
| 手順 | やること |
|---|---|
| 1 | Dockerイメージを作成する |
| 2 | ECRリポジトリを作成する |
| 3 | AWS CLIからECRへ認証する |
| 4 | DockerイメージへECR用のタグを付ける |
| 5 | docker pushでECRへ送信する |
| 6 | ECRコンソールでイメージを確認する |
ECRにpushするDockerイメージを作成する¶
まずはECRにpushするDockerイメージを作成しましょう。
Dockerの準備がまだの方はこちらの記事を参考にしてください。
【初心者向け】Dockerの環境をセットアップしてみよう!【Docker入門②】
今回はECRの操作を中心に解説するため、シンプルなNginxイメージを作ります。
作業用ディレクトリを作成します。
mkdir ecr-practice
cd ecr-practice
次にDockerfileを作成します。
FROM nginx:latest
Dockerfileの書き方はこちらの記事でも解説しています。
【初心者向け】Dockerファイルとは?書き方を解説【Docker入門④】
Dockerイメージをビルドします。
docker build -t ecr-practice .
作成できたか確認しましょう。
docker image ls
次のようにecr-practiceが表示されれば準備完了です。
REPOSITORY TAG IMAGE ID
ecr-practice latest xxxxxxxxxxxx
AWSでECRリポジトリを作成する¶
Dockerイメージが準備できたら、AWS側に保存先となるECRリポジトリを作成します。
ECRのリポジトリを作成する¶
AWSマネジメントコンソールで「ECR」と検索し、Elastic Container Registryを開きます。

元記事では「Elastic Container Service」と記載していましたが、ECRはElastic Container Registryです。
AWSのコンソール画面は更新されるため、現在の表示は画像と異なる場合があります。
次に、プライベートリポジトリの一覧からリポジトリを作成します。

「リポジトリを作成」をクリックします。

ECRリポジトリの設定¶
リポジトリ名を入力します。

たとえば今回は次の名前にします。
ecr-practice
ECRでは、タグを上書きできるMutableと、上書きを防ぐImmutableを選べます。
設定内容を確認したら、リポジトリを作成します。

ECRへpushする前にAWS CLIを確認する¶
ECRへDockerイメージをpushするには、ローカルPCからAWSへ認証する必要があります。
この記事ではAWS CLIを使います。
まずインストールされているか確認してください。
aws --version
設定済みのAWSアカウントを確認する場合は、次のコマンドが便利です。
aws sts get-caller-identity
ECRへのpushには、認証と対象リポジトリへのアップロード権限が必要です。
DockerをECRへログインさせる¶
ECRへpushする前に、aws ecr get-login-passwordでDockerを認証します。
aws ecr get-login-password \
--region ap-northeast-1 \
| docker login \
--username AWS \
--password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
123456789012の部分は自分のAWSアカウントIDへ変更してください。
また、リポジトリを東京リージョン以外へ作成した場合はap-northeast-1も変更します。
認証に成功すると、次のように表示されます。
Login Succeeded
ECRの認証トークンは12時間有効です。
しばらく時間が経ってからpushして認証エラーになった場合は、もう一度get-login-passwordを実行してみてください。
DockerイメージにECR用のタグを付ける¶
ECRへpushするときは、ローカルのDockerイメージへECRリポジトリのURIを含むタグを付けます。
まず、作成したリポジトリを選択しましょう。

リポジトリ画面にはURIが表示されています。
たとえば次のような形式です。
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-practice
Dockerイメージへタグを付けます。
docker tag ecr-practice:latest \
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-practice:latest
docker tagはイメージをコピーするのではなく、同じイメージへECR用の名前を追加します。
確認してみましょう。
docker image ls
元のecr-practice:latestとECR用の長い名前が、同じIMAGE IDで表示されます。
DockerイメージをECRへpushする¶
準備ができたら、ECRへpushします。
画面右上の「プッシュコマンドの表示」から、自分のリポジトリ用コマンドを確認することもできます。


今回は次のように実行します。
docker push \
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-practice:latest
完了したらECRコンソールでリポジトリを開きます。
latestタグのイメージが表示されれば成功です。
ECRへpushできないときの確認ポイント¶
no basic auth credentials¶
次のようなエラーが出る場合があります。
no basic auth credentials
ECRへのDocker認証ができていない可能性があります。
もう一度get-login-passwordを実行します。
aws ecr get-login-password \
--region ap-northeast-1 \
| docker login \
--username AWS \
--password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
特に、ログイン時とpush先のリージョンが同じか確認してください。
AccessDeniedException¶
AWS CLIで次のようなエラーになる場合は、IAM権限を確認します。
AccessDeniedException
ECRへログインするIAMユーザーやIAMロールに、必要なECR操作の許可があるか確認してください。
本番環境では、必要以上に強い権限を付けるのではなく、利用する操作に合わせて最小権限を設定することが大切です。
【関連記事】IAMポリシーについては、IAMポリシーとは?AWSの権限管理を初心者向けに解説も参考にしてください。
repository does not exist¶
push先のリポジトリ名やリージョンを間違えていると、リポジトリが存在しないというエラーになります。
次の3つを確認しましょう。
AWSアカウントID
リージョン
ECRリポジトリ名
似た名前のリポジトリを複数作っている場合は、ECRコンソールに表示されるリポジトリURIをコピーするのが確実です。
ECRでは古いDockerイメージの管理も大切¶
ECRを継続して使うと、デプロイのたびに古いDockerイメージが増えていきます。
ECRにはライフサイクルポリシーがあり、一定の条件を満たした古いイメージを自動で削除できます。
大量のイメージが増える場合は、何世代残すかルールを決めておくと管理しやすくなります。
ECRの使い方まとめ¶
今回の記事では、Amazon ECRへDockerイメージをpushする方法について解説しました。
基本的な流れは次の通りです。
# Dockerイメージを作成
docker build -t ecr-practice .
# ECRへログイン
aws ecr get-login-password \
--region ap-northeast-1 \
| docker login \
--username AWS \
--password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
# ECR用のタグを付ける
docker tag ecr-practice:latest \
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-practice:latest
# push
docker push \
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-practice:latest
ECSやFargateを学ぶ際にも使うため、まずは小さなDockerイメージをECRへpushしてみてください。
InfraAcademyでは、AWSやLinux、Dockerなどインフラの知識を実際に操作しながら学習できます。
AWSを基礎から学びたい方は、AWS講座をご覧ください。
Linuxの基本操作から学びたい方は、Linux入門講座も用意しています。





