ECRへコンテナイメージをpushするの巻

D
2024-09-25
2024-09-25

 

おつかれさまです。Dです。

最近は、ECSなどのコンテナについて諸々勉強中です。

今回は開発環境で作成したコンテナイメージをECRへ格納して、ECRへイメージをpushするところまでやってみます。(次回はpushしたコンテナイメージを使ってECSのセットアップ予定になります。)

内容

ざっくりした流れとしては以下になります。

  • コンテナイメージの準備(DockerFileからのビルドとか)※今回は割愛
  • ECRのセットアップ&コンテナイメージのアップ ← 今回
  • ECRに保存したコンテナイメージを利用してECSのセットアップ ← 次回

コンテナイメージの準備は今回は割愛させていただきます。(ご興味もっていただければ他の記事でコンテナイメージの作成などもありますのでご参考に。。)

ということでまずはECRのプライベートリポジトリを作成します。

リポジトリを作成をクリック。

今回はテストなのでリポジトリ名を適当に付けて作成します。

イメージタグのミュータビリティという聞きなれない設定がありますが、イメージタグを上書き許可するかしないかの設定のようです。ちょろっと調べた感じでは厳密なバージョン管理を実施する本番環境用のリポジトリだと上書きを禁止して、厳密にタグでバージョン管理したりするみたいです。今回はテストなのでデフォルトのままで作成します。(AWSアカウントの情報があるので、赤字で消しています。)

作成したらこんな感じです。

それではローカル環境のDockerサーバーで作成済みのコンテナイメージをECRへpushしていきます。pushするにはAWS CLIが必要なので、使えるようにセットアップしておきましょう。(セットアップ方法は割愛)

まずはDockerのコマンドラインでECRへpushやpullが出来るように、リポジトリ認証を実施します。コマンド例は以下になります。リポジトリを作成すれば、AWSのマネジメントコンソールにて「プッシュコマンドを表示」というボタンが押せるようになるので、そこから以下のコマンドが確認出来ます。

# aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin ***.dkr.ecr.ap-northeast-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-stores

Login Succeeded

次にpushしたいコンテナイメージにECRリポジトリのタグ名を付与する必要があります。docker imagesコマンドで現在の状況を確認しましょう。こんな感じです。

# docker images
REPOSITORY                                                                    TAG       IMAGE ID       CREATED       SIZE
almalinux9-apache-php-fpm                                    latest    189c1ec76621   2 hours ago   314MB

「189c1ec76621」にタグ名を付与します。(伏字はAWSアカウントです

# docker tag 189c1ec76621 *****.dkr.ecr.ap-northeast-1.amazonaws.com/testrepo

再度、確認するとタグ名が付与されているのが確認出来ます。(タグ名というかイメージの名前をAWSのプライベートリポジトリの名前に紐づけるみたいなイメージな気がする)

# docker images
REPOSITORY                                                                    TAG       IMAGE ID       CREATED       SIZE
****.dkr.ecr.ap-northeast-1.amazonaws.com/testrepo                    latest    189c1ec76621   2 hours ago   314MB
almalinux9-apache-php-fpm                                                     latest    189c1ec76621   2 hours ago   314MB

このイメージをECRへpushします。

# docker push ****.dkr.ecr.ap-northeast-1.amazonaws.com/testrepo:latest
The push refers to repository [005971567954.dkr.ecr.ap-northeast-1.amazonaws.com/testrepo]
905aed6e277c: Pushed
e786844d36d3: Pushed
67e7669f483a: Pushed
17a05a853414: Pushed
6ec667a9be49: Pushed
dfca9d6225fa: Pushed
a5f11fd7ba3a: Layer already exists
latest: digest: sha256:376a4813b34cbbb7bb6aa858e137f85b578412ad5af47d08e41e8fb88cdea2fb size: 1776

pushに成功すると以下のようにイメージが確認出来るようになります。

【まとめ】

dockerをゴリゴリ触ったことがある人だったり、開発系のエンジニアの方はGit運用で慣れている内容かもしれないですが、あんまり触ったことがない領域なので新鮮でした。

次回はpushしたコンテナイメージを使ってECSを立ち上げていきたいと思います。