출처: https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2019/05/amazon-ec2-container-registry-960x504.png

얼마전, 도커허브에 대한 정책이 발표 되어 Registry의 대체재를 찾는중 Github에서 베타로 제공하는 부분과 AWS에서 제공하는 부분을 살펴 보려고 했는데 Github Container Registry 는 이전에 포스팅 했다.

도커허브 제한으로 대체재를 찾기 위한 삽질기 참고

Github Container Registry 사용하기 참고

Amazon ECR 이란?

Amazon ECR은 Elastic Container Registry의 약자로 기존에는 Private 하게 사용할 수 있는 컨테이너 이미지 레지스트리 서비스였다.
하지만 얼마전 도커허브 컨테이너 이미지 제한으로 AWS에서 퍼블릭하게 컨테이너 이미지 레지스트리를 쓸 수 있도록 기능을 추가했다.
ECR의 특장점은 아래와 같다.

  • Public 저장소 50GB까지 무료!
  • Outbound 트래픽에 대한 비용이 500GB(익명)까지 무료, AWS Account에서 Pull 한 경우 5TB 까지 트래픽 사용료 무료
  • AWS 서비스와 결합도 높음

헤비하게 사용하지 않는 개발자라면 Amazon ECR을 사용하는 것도 나쁘지 않을 것 같다. 다만, 만약 자신이 만든 이미지가 대박칠 조짐이 보이면...외부로 나가는 전송량에 대한 비용이 청구 될 수 있기 때문에 이는 유의하는 것이 좋다.
자세한 비용은 아래 슬라이드 화면을 참고하자!

출처: https://www.youtube.com/watch?v=XLr55NXsHmA&t=1660s

 

이번 글에서는 퍼블릭 ECR을 2가지 방법(Management Console, CLI)로 생성해보고 간단한 nginx 이미지를 Push 해보겠다.

 

사전 준비 사항

  • AWS 계정이 있어야 한다.
  • AWS 계정 또는 IAM User의 프로그래밍 방식 접근 자격증명이 있어야 한다.
  • AWS CLI v2가 설치되어 있어야 한다.
  • ECR에 대한 IAM 권한을 User가 가지고 있어야 한다. (Create, Delete, push, pull 등)

Management Console로 Public ECR 생성

먼저 AWS 콘솔로 로그인 한다.

 

Find Services 또는 상단의 Services 메뉴를 클릭해서 ECR을 입력 -> Elastic Container Registry 를 클릭해 ECR로 이동한다.

 

ECR 메뉴로 접근하면 Private 탭이 기본이고 오른쪽에 Public 탭이 보일 것이다. Public 탭을 클릭한다.


Public 탭 우측 상단의 [Create repository]를 클릭한다.

 

클릭하면 여러 세션이 나오는데 하나씩 뜯어 보자.

General settings 섹션에서는 Visibility settings 메뉴가 있는데 여기서 Private으로 할 것이냐 아니면 Public 하게 오픈 할 지 결정할 수 있다. 한번 설정하면 다시 변경할 수 없으므로 주의해야 한다.

 

두번째 Detail 섹션에서 먼저 레파지토리 이름을 입력해야 한다.
레파지토리는 아래와 같이 설정된다.

public.ecr.aws/랜덤 해시값/입력한 레파지토리 명

필자는 public-ecr-demo 라고 입력하겠다.
그 외에 옵셔널 기능으로 로고를 올리는 기능, 설명하는 description, 컨텐츠가 어느 OS, Architecture에 맞는지 체크하는 부분이 있는데 해당 부분은 과감하게 패스!

 

아래 About과 Usage 섹션도 입력할 수 있으나 패스하고 [Create repository] 를 클릭해서 레파지토리를 생성한다.

자! 생성 되었다.

해당 레파지토리에 어떻게 컨텐츠 이미지를 올릴지 헷갈릴 수 있는데 상단 우측의 [View push commands] 버튼을 클릭하면 해당 명령어를 볼 수 있다.

이제 본인의 로컬로 돌아가서 이미지를 준비하자.
필자는 Mac 환경이므로 window를 쓰는 유저와는 조금 다를 수 있음에 유의해야 한다.

 

컨테이너 이미지가 있는지 조회했을 때 필자는 이전에 github 컨테이너 레지스트리에 올리기 위해 준비한 이미지가 있으므로 해당 이미지를 ECR에 맞게 태깅하겠다.

docker tag nginx:latest public.ecr.aws/v1v9p2j9/public-ecr-demo:latest

 

아래 명령어로 조회하면 태깅된 이미지를 확인할 수 있다.

 

자! 이제 남은 작업은 ECR에 로그인 -> push 이다.
먼저 로그인을 하면 로그인은 아래와 같이 진행한다.

aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/v1v9p2j9

파이프로 이어져 있는데 해석하면 아래와 같다.
aws ecr-public get-login-password --region us-east-1 : 해당 명령은 public ECR에 로그인하기 위한 패스워드 정보를 얻기 위함인데 독특한 부분이 있다. 리전을 us-east-1으로 해야 하는데 해당 ECR은 현재 us-east-1에 생성되는 것으로 보인다. (버지니아 북부)
--> 확인한 결과 ECR은 CloudFront(Edge Caching 서비스)로 서비스 되고 기본적으로 크로스 리전 리플리케이션으로 중복성을 제공한다.

docker login --username AWS --password-stdin public.ecr.aws/v1v9p2j9 : docker login 명령어를 통해 실제로 로그인한다. username은 AWS로 고정이고 password는 파이프 앞에서 입력한 값을 standard input으로 입력받아 사용하고 뒤에 ecr의 엔드 포인트를 적어준다. (복잡하지만 Management Console의 View Command를 보면 바로 나오므로 부담을 가지고 외울 필요는 없다.

혹시나 외우기 귀찮다면 sh 파일을 하나 만들어서 해당 명령을 입력하는 것도 괜찮다.
긴 명령어를 입력하면 아래와 같이 Login Succeeded라는 성공 메시지가 나온다.

자 만들어 놓은 이미지를 푸시한다. (ECR URI는 필자와 다를 수 있기 때문에 유의)

docker push public.ecr.aws/v1v9p2j9/public-ecr-demo:latest

 

마지막으로 AWS 콘솔에서 확인해 보면 내가 push한 이미지가 latest로 구성되어 있는것을 확인할 수 있다.

 

CLI로 Public ECR 생성

CLI로  ECR 레파지토리를 생성해보자.
아래 명령어를 CLI로 입력한다.
(주의: default region이 us-east-1이 아닌경우 필히! 지정해 주어야 한다. 그렇지 않으면 에러남!)

aws ecr-public create-repository --repository-name public-ecr-cli-demo --region us-east-1

 

자 이제 콘솔에서 확인해 보자.
필자가 입력한 public-ecr-cli-demo 라는 형태로 ECR 레파지토리가 생성된 것을 확인할 수 있다.
(도커 로그인, 이미지 푸시는 위에서 설명한 부분과 동일하므로 생략)

 

결론

AWS에서 제공하는 ECR은 AWS서비스와의 강력한 결합을 제공하기도 하고 무료로 쓸 수 있는 부분도 있기 때문에 헤비하게 컨테이너 이미지를 개발하는 개발자가 아니라면 써봄직 하다.

다만, 주의할 것은 무료 사용량을 넘어설 경우를 대비해야 한다는 점. 이것은 잊지 말기 바란다.

+ Recent posts