Amazon ECR(Elastic Container Registry)のプライベートリポジトリにDockerイメージをプッシュするまでの手順を記録します。手順はAWS CLIのインストール、AWSアカウントの作成、IAM Identity Centerでユーザーの追加・設定、AWS SSOの設定、Amazon ECRでDockerイメージのプッシュに分けます。無料枠での利用を想定しています。
Amazon ECRとは
Dockerコンテナイメージを保存、共有、デプロイできるDockerコンテナレジストリ
環境
- CentOS7
- Dockerはインストール済み
手順
1. AWS CLIのインストール
2. AWSアカウントの作成
3. IAM Identity Centerでユーザーの追加・設定
4. AWS SSOの設定
5. Amazon ECRでDockerイメージのプッシュ (本記事)
SSO認証でログイン
- 下記コマンドでSSO認証用に作成したプロフィールでログインする
- デフォルトのブラウザに表示されたコードとターミナルに出力されたコードが同じであることを確認し、「Confirm and continue」をクリックする
$ aws sso login --profile <プロフィール名>
Amazon ECRレジストリにログイン
- 下記コマンドを実行し、ログインする
-
get-login-password
で認証トークンを出力する -
docker login
コマンドの--password-stdin
オプションでトークンを取得する -
--username
オプションはAWS
を指定する
-
$ aws ecr get-login-password --region <リージョン> --profile <プロフィール名> | docker login --username AWS --password-stdin <awsのアカウントID>.dkr.ecr.ap-<リージョン>.amazonaws.com
- 下記のメッセージが出力さればログインできたことが確認できる
Login Succeeded
リポジトリの作成
- 下記コマンドを実行し、Dockerイメージをプッシュするリポジトリを作成する
$ aws ecr create-repository --repository-name <任意のリポジトリ名> --region <リージョン名> --profile <プロフィール名>
タグ付け
- 下記コマンドを実行し、プッシュするイメージの内容を確認する
$ docker images
...
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest bfe6700e6779 2 months ago 147MB
- 上記で確認した
httpd:latest
のイメージを、<awsアカウントID>.dkr.ecr.<リージョン名>.amzonaws.com/<設定したリポジトリ名>
とタグ付けする
$ docker tag httpd:latest <awsアカウントID>.dkr.ecr.<リージョン>.amazonaws.com/<作成したリポジトリ名>
イメージのプッシュ
- 下記コマンドを実行し、作成したリポジトリにイメージをプッシュする
$ docker push <awsアカウントID>.dkr.ecr.<リージョン名>.amazonaws.com/<設定したリポジトリ名>
- 下記の出力が確認できればイメージのプッシュが完了したことが確認できる
The push refers to a repository [<awsアカウントID>.dkr.ecr.<region>.amazonaws.com/<設定したリポジトリ名>] (len: 1)
e9ae3c220b23: Pushed
a6785352b25c: Pushed
0998bf8fb9e9: Pushed
0a85502c06c9: Pushed
latest: digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636EXAMPLE size: 6774
参考
-
AWS ECRの操作について
https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html -
「get-login-password」について
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ecr-public/get-login-password.html -
「docker login」について
https://docs.docker.jp/engine/reference/commandline/login.html#id20 -
「docker tag」について
https://docs.docker.jp/engine/reference/commandline/tag.html