만자의 개발일지

[Docker] ECR Public Repository에 이미지 Push하기 본문

Docker

[Docker] ECR Public Repository에 이미지 Push하기

박만자 2022. 2. 25. 15:40

이번 포스팅에서는 Public ECR에 이미지를 Push하는법에 대해 알아보도록 하겠습니다.


기존의 ECR은 Private Repository만 사용할 수 있었는데, 도커 허브 이미지 제한 때문에 AWS에서 Public하게 이미지 레지스트리를 쓸 수 있도록 추가하였습니다.

AWS에서 자체 제공하는 ECR Public Repository 종류는 아래 사이트에서 확인할 수 있습니다.

https://gallery.ecr.aws/

 

ECR Public Gallery

Amazon ECR Public Gallery is a website that allows anyone to browse and search for public container images, view developer-provided details, and see pull commands

gallery.ecr.aws

 

 

 

ECR은 또한 Public Repository에 대해 50GB까지 무료로 제공해줍니다. 자세한 내용은 아래 사이트를 통해 확인할 수 있습니다.

https://aws.amazon.com/ko/ecr/pricing/

 

완전관리형 컨테이너 레지스트리 – Amazon Elastic Container Registry 요금 - Amazon Web Services

Amazon Elastic Container Registry(Amazon ECR)는 어디에서나 컨테이너 소프트웨어를 손쉽게 저장, 공유 및 배포할 수 있는 완전관리형 컨테이너 레지스트리입니다. Amazon ECR을 사용하면 이미지와 아티팩트

aws.amazon.com

 

ECR Public Repository 생성

ECR Public Repository에 이미지를 올릴것이기 때문에 먼저 Public Repository부터 생성해 보도록 하겠습니다.

 

AWS 콘솔로 접속하여 ECR을 검색해 들어가줍니다.

 

그 다음 Repositories 메뉴로 들어가 Create repository 버튼을 눌러줍니다.

 

Visibility는 Public으로 지정해 주시고 Repository명을 지정해 줍니다.

 

Content types 에서 운영체제와 시스템 아키텍처를 지정해 줄 수 있습니다. 하지만 여기서는 사용하지 않으므로 아무것도 체크하지 않고 넘어가도록 하겠습니다. 하단의 About과 Usage에서는 해당 Repository에 관한 설명을 적어줄 수 있습니다. Create repository 버튼을 눌러 Repository를 생성해 줍니다.

 

잘 생성된 것을 보실 수 있습니다.

ECR Public Repository에 이미지를 Push하기 위해서는 ECR Public Repository에 대한 권한이 필요합니다. ECR Repository에 대해 액세스 토큰을 발급받을때 AWS Configure에서 설정한 유저에대해 ECR Public Repository에 대한 권한이 없다면 denied를 반환합니다.

 

그렇기 때문에 IAM에서 유저를 하나 생성해 권한을 부여한 후 해당 액세스 키 와 시크릿 액세스 키로 AWS Configure를 설정해 주도록 하겠습니다.

 

IAM User 생성

AWS 콘솔로 접속하여 IAM을 검색해 들어가줍니다.

Users 메뉴를 선택한 후 Add users 버튼을 눌러줍니다.

 

유저명을 지정해주신 후 AWS Configure 설정을 위해 액세스 키 발급을 활성화 해줍니다.  Next: Permissions 버튼을 눌러 다음 단계로 넘어갑니다.

 

Public을 검색한 후 AmazonElasticContainerRegistryPublicFullAccess 권한을 선택해줍니다. Next: Tags 버튼을 눌러 다음 단계로 넘어갑니다.

 

태그 설정은 넘어가도록 하겠습니다. Next: Review 버튼을 눌러 다음 단계로 넘어갑니다.

 

앞에 단계에서 설정한 내용들을 확인한 후 Create user 버튼을 눌러 유저를 생성해 줍니다.

 

그러면 Access key와 Secret access key가 나오는데 이따 사용해야 되기 때문에 .csv파일로 저장하거나 아니면 따로 메모장에 복사해 두도록 합니다.

 

잘 생성된 것을 볼 수 있습니다.

 

이미지 Push하기

이제 이미지를 Push하는 방법에 대해 알아보도록 하겠습니다.

먼저 위에서 생성한 유저의 Acces key와 Secret access key로 AWS Configure를 설정해 줍니다.

$ aws configure
AWS Access Key ID [****************ABCD]: ***************ABCD
AWS Secret Access Key [****************ABCD]: **************************ABCD
Default region name [ap-northeast-2]: ap-nortehast-2
Default output format [json]: json

 

그 다음 다음과 같은 명령어를 입력해 액세스 토큰을 발급 받습니다. <alias>는 자신의 alias로 지정해 주도록 합니다.

$ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/<alias>
Login Succeeded

Logging in with your password grants your terminal complete access to your account.
For better security, log in with a limited-privilege personal access token. Learn more at https://docs.docker.com/go/access-tokens/

 

그 다음 위에서 생성한 Public Repositroy명으로 이미지를 생성합니다. 태그명은 본인이 원하는대로 지어주시면 됩니다.

$ docker build . -t public.ecr.aws/<alias>/<ecr_public_repository_name>:<tag>

ex) docker build . -t public.ecr.aws/abcd123/manja-demo-repository:latest

 

그 다음 위에서 생성한 이미지를 docker push 명령어로 ECR Public Repository로 Push해줍니다.

$ docker push public.ecr.aws/<alias>/<ecr_public_repository_name>:<tag>

ex) docker push  public.ecr.aws/abcd123/manja-demo-repository:latest
258bb9f17aa9: Pushed
61c9485de533: Pushed
5f70bf18a086: Pushed
.
.
.
latest: digest: sha256:e7d70d470e88c3dba7b578a40248b7fe54f6c50e042e483ee5494a859ae920d5 size: 3460

 

ECR로 들어가 확인해 보면 이미지가 잘 Push된 것을 보실 수 있습니다.

 

Comments