LoginSignup
0
1

More than 3 years have passed since last update.

ECRを使ってみる

Posted at

Amazon ECRを使ってみる。
環境はEC2(AmazonLinux2:t2.micro)。

リポジトリ作成

マネジメントコンソール → サービス → ECS → レポジトリ で「レポジトリを作成」

レポジトリ名を入力
 名前空間を含めることができるとのことなので
 今回は sandbox/test-pj/web とする。

タグのイミュータビリティ
 有効にすると同じタグを上書きができなくなる。
 業務等でイメージのバージョンを確実に管理したい場合は
 有効にしたほうがよさそう。 

 # タグが上書きできてしまうとイメージの特定するには
 # ハッシュ値が必要になってしまう。

 一方、上書きできないとlatestのようなタグは
 使い勝手が著しく悪くなるのでどっちにするかは用途次第。

イメージスキャンの設定
 有効にするとプッシュ後も自動でイメージスキャンをしてくれる。
 

AWS CLI のバージョンアップ

バージョンアップしておかないとdockerコマンドの認証まわりでエラーが出る可能性がある。
バージョンアップの仕方は公式ドキュメントの「Linux での AWS CLI バージョン 2 の更新」。

AWS_CLIのバージョンアップ
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

unzip awscliv2.zip

which aws

ls -l /usr/bin/aws  ←whichコマンドの結果次第で内容が変わる

sudo ./aws/install --bin-dir /usr/bin --install-dir /usr/bin --update ←whichコマンド、lsコマンドと結果次第で内容が変わる

aws --version

参考までに、バージョンアップしないでdockerコマンドでget-login-passwordをやったら以下のとおりエラーになった。

バージョンアップしないとエラーになる
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 056789090539.dkr.ecr.ap-northeast-1.amazonaws.com

usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help
aws: error: argument operation: Invalid choice, valid choices are:

batch-check-layer-availability           | batch-delete-image
batch-get-image                          | complete-layer-upload
create-repository                        | delete-lifecycle-policy
delete-repository                        | delete-repository-policy
describe-image-scan-findings             | describe-images
describe-repositories                    | get-authorization-token
get-download-url-for-layer               | get-lifecycle-policy
get-lifecycle-policy-preview             | get-repository-policy
initiate-layer-upload                    | list-images
list-tags-for-resource                   | put-image
put-image-scanning-configuration         | put-image-tag-mutability
put-lifecycle-policy                     | set-repository-policy
start-image-scan                         | start-lifecycle-policy-preview
tag-resource                             | untag-resource
upload-layer-part                        | get-login
help
Error: Cannot perform an interactive login from a non TTY device

dockerインストール

公式ドキュメントの「Docker のインストール」

IAMロールを作成しEC2にアタッチ

公式ドキュメント
「 Amazon ECR リポジトリへのアクセス」を参考に
Resourceは*でポリシーを作成しEC2にアタッチ。

ECR用ポリシー
{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"ListImagesInRepository",
         "Effect":"Allow",
         "Action":[
            "ecr:ListImages"
         ],
         "Resource":"*"
      },
      {
         "Sid":"GetAuthorizationToken",
         "Effect":"Allow",
         "Action":[
            "ecr:GetAuthorizationToken"
         ],
         "Resource":"*"
      },
      {
         "Sid":"ManageRepositoryContents",
         "Effect":"Allow",
         "Action":[
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetRepositoryPolicy",
                "ecr:DescribeRepositories",
                "ecr:ListImages",
                "ecr:DescribeImages",
                "ecr:BatchGetImage",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload",
                "ecr:PutImage"
         ],
         "Resource":"*"
      }
   ]
}

あとはマネジメントコンソール → ECR → リポジトリから
対象リポジトリを選んで「プッシュコマンドの表示」をクリックし
表示される内容をやっていくだけ。

image.png

デフォルトレジストリに対して認証する

認証
$ 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 /home/ec2-user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

イメージ作成

イメージ作成
$ docker build -t sandbox/test-pj/web .

$ docker image ls
REPOSITORY                  TAG           IMAGE ID            CREATED             SIZE
sandbox/test-pj/web         latest        c2df0d42b9ce        10 seconds ago      221MB
$

ECR登録用のタグ付け

ECR登録用のタグ付け
$ docker tag sandbox/test-pj/web:latest ************.dkr.ecr.ap-northeast-1.amazonaws.com/sandbox/test-pj/web:latest

$ docker image ls
REPOSITORY                                                              TAG                 IMAGE ID            CREATED              SIZE
************.dkr.ecr.ap-northeast-1.amazonaws.com/sandbox/test-pj/web   latest              c2df0d42b9ce        About a minute ago   221MB
sandbox/test-pj/web                                                     latest              c2df0d42b9ce        About a minute ago   221MB

PUSH

PUSH
$ docker push ************.dkr.ecr.ap-northeast-1.amazonaws.com/sandbox/test-pj/web:latest

:latest
631e3af3d0e9: Pushed
fc8234f25c50: Pushed
933e707b3698: Pushed
895d16eabfa1: Pushed
latest: digest: sha256:d5d908a0a3e69a0c37af7b64dc21146333a358cc733b33837e279647d619c101 size: 1155
$
0
1
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
0
1