Print
카테고리: [ Amazon Web Services ]
조회수: 10587

1. 개요

ECR 생성 후 Docker push로 이미지 넘기는 단계에 대한 정리이다.


2. ECR 생성

AWS ECS 내에서 Registry를 생성한다.


3. Docker 클라이언트에서 ECR 접속 (2018년 버전)

3.1. AWS CLI 생성되었는지 확인

3.2. AWS Credential 확인

aws configure 수행한다.

3.3. ECR 로그인

$ sudo aws ecr get-login --no-include-email

위 커맨드를 실행하여 나오는 결과물을 그대로 붙여넣기 하면 된다. 

일부 AWS 문서에서는 그냥 aws ecr get-login 해서 나온 결과를 붙여넣기 하면 된다는데 나는 이런 에러가 났다.

unknown shorthand flag: 'e' in -e
See 'docker login --help'.

참고로 AWS CLI 버전이 너무 낮아도 안된다고 하니 aws --version 하여 확인도 해보자.


4. Docker 클라이언트에서 ECR 접속 (2019년 버전)

4.1. ECR 로그인

$ sudo $(aws ecr get-login --no-include-email --region ap-northeast-2)
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

만약 다음과 같은 에러가 난다면,

$ sudo $(aws ecr get-login --no-include-email --region ap-northeast-2)

An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:iam::123456789000:user/admin is not authorized to perform: ecr:GetAuthorizationToken on resource: *

권한을 줘야한다! 그래서 이런 Policy를 만들어서 붙였다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListImagesInRepository",
            "Effect": "Allow",
            "Action": [
                "ecr:ListImages"
            ],
            "Resource": "arn:aws:ecr:ap-northeast-2:123456789000:repository/*"
        },
        {
            "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": "arn:aws:ecr:ap-northeast-2:123456789000:repository/*"
        }
    ]
}

5. Docker push

도커 이미지를 빌드하여 push 하는 것 상세 단계는 다른 문서를 참고하라. 간단히 요약하자면..

5.1. 이미지 빌드

5.2. 이미지 태그

$ sudo docker tag my xyzxyzxyz.dkr.ecr.ap-northeast-2.amazonaws.com/ecr-test/repo:my

5.3. Push

[예1]

$ sudo docker push xyzxyzxyz.dkr.ecr.ap-northeast-2.amazonaws.com/ecr-test/repo:my

[예2] 

$ sudo docker push 123456789000.dkr.ecr.ap-northeast-1.amazonaws.com/appscan:0.1
The push refers to repository [123456789000.dkr.ecr.ap-northeast-1.amazonaws.com/mytest]
98543e745b27: Pushed
edd61588d126: Pushed
9b9b7f3d56a0: Pushed
f1b5933fe4b5: Pushed
0.1: digest: sha256:d4d99a1a1575bef63764ece50540a7f2c0c8b0acd893d8022059b5cc2dcaac9e size: 1158

Pushed 되면 성공한 것이다.