InfraAcademy

InfraAcademy Blog

【AWS】ECRの使い方とは?DockerイメージをECRにpushしてみる

| #Docker #aws #ecr
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、フルスタックエンジニアの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を開きます。

ECRの作成

元記事では「Elastic Container Service」と記載していましたが、ECRはElastic Container Registryです。

AWSのコンソール画面は更新されるため、現在の表示は画像と異なる場合があります。

次に、プライベートリポジトリの一覧からリポジトリを作成します。

ECRの選択

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

ECRリポジトリを作成

ECRリポジトリの設定

リポジトリ名を入力します。

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入門講座も用意しています。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る