LoginSignup
9
6

More than 3 years have passed since last update.

【AWS ECR】Dockerイメージの保存と取得

Posted at

目標

AWS ECRを利用したDockerコンテナレジストリ上にDokcerイメージの保存及び取得を実施する。

はじめに

以下Youtube動画(by くろかわこうへい氏)に沿ってハンズオンを実施した結果をアウトプットとして記載致しました。
AWS ECRに関する基本事項は以下のリンクより学習することが出来ます。

今から追いつくDocker講座!AWS ECSとFargateで目指せコンテナマスター!〜シリーズ3回目〜

前提

・Dockerデーモンが起動しているEC2インスタンス(Amazon Linux2)が構築済みであること(※)。

※以下記事の手順1「Dockerデーモン起動」までを完了すれば前提は整います。
【Docker】dockerfileを利用してEC2にApacheコンテナを構築(Dockerデーモン起動)

作業の流れ

項番 タイトル
1 ECRの構築
2 ECRアクセス用IAMロールアタッチ
3 ECRにDockerイメージを保存する
4 ECRからDockerイメージを取得する

手順

1.ECRの構築

ECRコンソールからレポジトリ作成を開始します。tempsnip.png

レポジトリ名を入力し(本記事ではtestrepoとしました)、下段にあるレポジトリ作成実行ボタンをクリック
tempsnip.png
tempsnip.png

レポジトリが正常に構築されました。
image.png

2.ECRアクセス用IAMロールアタッチ

EC2からECRへアクセスするための権限を付与するため、IAMロールの作成、及び対象EC2インスタンスへのアタッチを実施します。

IAMロールコンソールからロールの作成をクリック
tempsnip.png

今回はIAMロールをEC2にアタッチするため、EC2を信頼されたエンティティとして設定します。
tempsnip.png

ECRへのフルアクセス権を付与するIAMポリシーAmazonEC2ContainerRegistryFullAccessをIAMロールに埋め込みます。
tempsnip.png

IAMロール名を記載(本記事ではecr-accessと設定)しロールの作成を実行します。

tempsnip.png

作成したIAMロールを対象のEC2インスタンスへアタッチします。
tempsnip.png

tempsnip.png

3.ECRにDockerイメージを保存する

対象のEC2インスタンスへOSログイン(ルートユーザ前提として記載します)し、dockerfileの記載を行います。

サンプルとして、httpdをインストールし、コンテナ起動時にhttpdを自動起動するDockerイメージを作成するような処理を記述します。

dockerfile
FROM centos:centos7

RUN yum -y install httpd

CMD ["/usr/sbin/httpd","-DFOREGROUND"]

次にECRコンソールに戻り、作成したECRレポジトリを選択しプッシュコマンドの表示をクリックします。
tempsnip.png

すると対象のECRレポジトリにプッシュを行うために一連のコマンドが表示されます。
これらを順に実行していく流れとなります。

image.png

まずは上記プッシュコマンド群の1番目をコピーして実行します。
内容はECRレポジトリへのログインパスワードを取得し、そのパスワードを標準入力としてdocker loginを実行するという内容です。

Login Succeededと表示されればOKです。(IAMロールの設定等が誤っているとcredential系のエラーが表示されます)

[root@ip-172-31-35-94 ~]# aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 932699493995.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/#credentials-store

Login Succeeded

2番目のコマンドは通常のdocker buildコマンドです。

docker build -t testrepo .

3番目のコマンドでECRレポジトリプッシュに必要なタグ付けをdocker tagで実施します。

[root@ip-172-31-35-94 ~]# docker tag testrepo:latest 932699493995.dkr.ecr.ap-northeast-1.amazonaws.com/testrepo:latest
[root@ip-172-31-35-94 ~]# docker images
REPOSITORY                                                   TAG                 IMAGE ID            CREATED             SIZE
932699493995.dkr.ecr.ap-northeast-1.amazonaws.com/testrepo   latest              306adf672fc7        10 minutes ago      330MB
testrepo                                                     latest              306adf672fc7        10 minutes ago      330MB
centos                                                       centos7             8652b9f0cb4c        2 months ago        204MB

4番目のコマンドで実際にdocker pushを実行します。

[root@ip-172-31-35-94 ~]# docker push 932699493995.dkr.ecr.ap-northeast-1.amazonaws.com/testrepo:latest
The push refers to repository [932699493995.dkr.ecr.ap-northeast-1.amazonaws.com/testrepo]
9cdaef33df63: Pushed
174f56854903: Pushed
latest: digest: sha256:33f3b20422ea489ca61be9a5b4334b0a68572989b4143bca3cb6d55825c2c07c size: 741

aws ecr describe-images --repository-name リポジトリ名 --region ap-northeast-1を実行し、プッシュしたイメージが確認出来ればOKです。

[root@ip-172-31-35-94 ~]# aws ecr describe-images --repository-name testrepo --region ap-northeast-1
{
    "imageDetails": [
        {
            "artifactMediaType": "application/vnd.docker.container.image.v1+json",
            "imageSizeInBytes": 135861914,
            "imageDigest": "sha256:33f3b20422ea489ca61be9a5b4334b0a68572989b4143bca3cb6d55825c2c07c",
            "imageManifestMediaType": "application/vnd.docker.distribution.manifest.v2+json",
            "imageTags": [
                "latest"
            ],
            "registryId": "932699493995",
            "repositoryName": "testrepo",
            "imagePushedAt": 1610607670.0
        }
    ]
}

4.ECRからDockerイメージを取得する

ECRコンソールから、ECR内に保存されているDockerイメージのURLをコピーします。
tempsnip.png

コピーしたURLをdocker pullコマンドの引数として実行します。

[root@ip-172-31-35-94 ~]# docker pull 932699493995.dkr.ecr.ap-northeast-1.amazonaws.com/testrepo:latest
latest: Pulling from testrepo
Digest: sha256:33f3b20422ea489ca61be9a5b4334b0a68572989b4143bca3cb6d55825c2c07c
Status: Downloaded newer image for 932699493995.dkr.ecr.ap-northeast-1.amazonaws.com/testrepo:latest
932699493995.dkr.ecr.ap-northeast-1.amazonaws.com/testrepo:latest
9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6