ECRにDockerコンテナイメージをpush、pullする
Amazon ECRとは?
- Amazon Elastic Container Registryのことです
- フルマネージドコンテナレジストリ(AWSが管理するコンテナの保存場所)
- Dockerコンテナイメージを保存・管理ができます
本記事のゴール
- ローカルで作成したDockerコンテナイメージをECRに保存(push)する
- ECRにあるDockerコンテナイメージを取得(pull)する
事前準備
- AWS CLIとDocker(バージョン1.7以上)をインストールしてください
- AWSへサインアップし、アカウントを作成してください
- ECRを利用するためのIAMユーザを作成してください
- AWSアカウントの作成、IAMユーザの作成はこちらを参考にしてください
コンソールでリポジトリ作成する
コンソールでAWS ECR > リポジトリ
を開いてください
リポジトリを作成
をクリックしてください。
今回はECRへイメージのpush、pullを経験するだけなので、以下のように設定してください。
- 一般設定
- 可視性設定はプライベート
- リポジトリ名に
hello_world
を入力 - タグのイミュータビリティは無効
- イメージスキャンの設定
- プッシュ時にスキャンは無効
- 暗号化設定
- KMS暗号化は無効
ローカルでDockerfileを作成
Dockerfile
というファイルを作成します。
$ touch Dockerfile
Dockerfile
を以下のように編集します
FROM nginx:mainline-alpine
COPY index.html /usr/share/nginx/html/
Dockerfile
と同じ階層に以下のようなindex.html
を追加します
HELLO WORLD
新しいイメージを構築する
Dockerfile
からDockerイメージを作成します
Dockerfile
がある階層で以下のコマンドを実行します
$ docker build -t hello_world .
次に以下のコマンドを実行しhello_world
というイメージが作成されていることを確認してください
$ docker images
REPOSITORY IMAGE ID CREATED SIZE
hello_world latest c5314e4cb254 2 seconds ago 22.1MB
イメージの実行
作ったイメージを実行します
以下のコマンドを実行してください
$ docker run -it --rm -p 80:80 hello_world
ローカルで動作確認をする
ブラウザで http://localhost/ にアクセスしてください
HELLO WORLD
と表示されていればOKです
デフォルトレジストリに対して認証する
Docker CLIを認証することでAmazon ECRを使用してイメージをpush、pullできます
コンソールのプライベートリポジトリ一覧で先ほど作成したhello_world
というリポジトリを選択し、プッシュコマンドの表示
というボタンをクリックしてください
そこに認証トークンを取得し、レジストリに対してDocker CLIを認証するためのコマンドが書かれています
$ aws ecr get-login-password --region xxxx | docker login --username AWS --password-stdin xxxx.dkr.ecr.xxxx.amazonaws.com
上記のコマンドを実行すると認証ができます
Login Succeeded
と表示されれば成功です
以下のようなエラーが発生した場合、ACCESS_KEY
とSECRET_KEY
が一致しておりません。
An error occurred (UnrecognizedClientException) when calling the GetAuthorizationToken operation: The security token included in the request is invalid.
Error: Cannot perform an interactive login from a non TTY device
ACCESS_KEY
とSECRET_KEY
を再設定するか、別のprofileを利用している場合はコマンドの --region [region]
を --profile [profile name]
に変更してあげてください
参考記事
またprofileの設定については、こちらの記事が参考になります
docker pushしてコンソールで確認
コンソールのプライベートリポジトリ一覧で先ほど作成したhello_world
というリポジトリを選択し、プッシュコマンドの表示
というボタンをクリックしてください
ローカルでの動作確認時にイメージを実行しているのでdocker build -t hello_world .
というコマンドは不要です
リポジトリにイメージをプッシュできるように、イメージにタグを付けます
$ docker tag hello_world:latest xxxxx.dkr.ecr.xxxxx.amazonaws.com/hello_world:latest
次に以下のコマンドでイメージをプッシュします
$ docker push xxxxx.dkr.ecr.xxxxx.amazonaws.com/hello_world:latest
プッシュが完了したらコンソールでプライベートリポジトリ一覧でhello_world
をクリックし、latest
というイメージタグで追加されていることを確認してください
ローカルのdocker imageを削除して、docker pullする
ローカルにあるdocker imageを確認します
$ docker images
ECRにプッシュする際、タグをつけたものと、hello_world
があると思います
REPOSITORY IMAGE ID CREATED SIZE
xxxx.dkr.ecr.xxxx.amazonaws.com/hello_world latest c5314e4cb254 2 days ago 22.1MB
hello_world latest c5314e4cb254 2 days ago 22.1MB
以下のコマンドを実行し、2つともローカルから削除します
$ docker rmi xxxx.dkr.ecr.xxxx.amazonaws.com/hello_world:latest
$ docker rmi hello_world:latest
再度、ローカルからイメージが消えていることを確認してください
$ docker images
次にECRにプッシュしたイメージをpullします
以下のコマンドを実行してください
※ {aws_account_id}
, {region}
となっている部分にはご利用されているAWSのアカウントidとリージョンを指定してください
$ docker pull {aws_account_id}.dkr.ecr.{region}.amazonaws.com/hello_world:latest
ローカルにあるdocker imageを確認し、イメージがあればOKです
$ docker images
イメージ、リポジトリをコンソールで削除する
最後にコンソールからイメージとリポジトリを削除しておきましょう
- イメージをチェックし、削除ボタンをクリック
- リポジトリをチェックし、削除ボタンをクリック
Discussion