aws

[AWS] ECR 시작하기

ri5 2023. 4. 5. 18:11

ECR 이란?

아마존에서 설명하는 ECR

Amazon Elastic Container Registry(Amazon ECR)는 안전하고 확장 가능하고 신뢰할 수 있는 AWS 관리형 컨테이너 이미지 레지스트리 서비스입니다. Amazon ECR은 AWS IAM을 사용하여 리소스 기반 권한을 가진 프라이빗 리포지토리를 지원합니다. 따라서 지정된 사용자 또는 Amazon EC2 인스턴스가 컨테이너 리포지토리 및 이미지에 액세스할 수 있습니다. 원하는 CLI를 사용하여 도커 이미지, Open Container Initiative(OCI) 이미지 및 OCI 호환 아티팩트를 푸시, 풀 및 관리할 수 있습니다.

한마디로 도커 허브와 같은 컨테이너의 이미지를 관리하는 레지스트리 서비스 이다. 거기에 추가적으로 IAM(AWS 권한 정책)등을 통해서 리포지토리 마다 각 다른 권한을 줘서 관리할 수 있고 다른 AWS 서비스와 호환성도 도커 허브보다 더 좋기 때문에 AWS를 통해 컨테이너를 관리하게 된다면 ECR을 필수적으로 사용하게 된다.

선택1. ECR 인터페이스로 생성

1. Elastic Conainer Registry를 검색하여 리포지토리 생성 클릭

2. ECS 배포를 일반 설정

표시 여부 설정

  • 프라이빗: IAM 정책이나 리포지토리 권한에 접근가능 한 유저만 사용할 수 있습니다.
  • 퍼블릭: ECR 갤러리에 공개되어 누구나 접근가능하고 pull을 받을 수 있습니다.

실제 서버를 구축한다고 가정하고 진행하기에 프라이빗으로 생성한다.

리포지토리 이름

  • 이미지를 관리하는 리포지토리 이름을 설정한다.

태그 변경 불가능

  • 로컬 도커에서 푸시를 되는 이미지를 식별할 태그를 변경할 수 있도록 하는 설정 옵션이다.

3. 이미지 스캔 설정

AWS에서의 이미지 스캔은 두가지 종류의 스캔을 제공하며 아래와 같은 문제를 인식한다.

  • 고급 스캔: 컨테이너 이미지에 대한 취약성 스캔 기능을 제공합니다. 운영 체제 및 프로그래밍 언어 패키지 취약성 모두에 대해 컨테이너 이미지가 스캔됩니다.
  • 기본스캔: CVE(공개적으로 알려진 컴퓨터 보안 결함 목록) 데이터베이스를 사용하는 기본 스캔 유형을 제공합니다.

4. 암호화 설정

ECR에서 이미지를 올리게 되면 S3로 저장할 때 기본적인 AES-256 암호화 알고리즘을 사용하여 유휴 데이터를 암호화를 하여 저장하게 됩니다. 하지만 KMS 암호화를 키게 되면 AWS Key Management Service에 저장된 KMS 키로 서버 측 암호화를 사용할 수 있습니다.

 

5. 리포지토리 생성

설정하고자하는 옵션을 설정 후 생성을 누르게 되면 리포지토리 탭에 추가된 것을 볼 수 있다.

선택2. ECR CLI로 생성

1. AWS CLI 설치

아래의 메뉴얼에 따라 cli를 설치한다.

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

 

최신 버전의 AWS CLI 설치 또는 업데이트 - AWS Command Line Interface

이전 버전에서 업데이트하는 경우 unzip 명령을 실행하면 기존 파일을 덮어쓸지 묻는 메시지가 표시됩니다. 스크립트 자동화와 같은 경우에 이러한 프롬프트를 건너뛰려면 unzip에 대한 -u 업데이

docs.aws.amazon.com

 

2. AWS ECR 로그인

아래에서 region과 account code를 지정하여 로그인 합니다.

※ 참고

  • 서울 리전의 코드는 ap-northeast-2
  • Account Code는 위 상단의 내정보를 통해 확인할 수 있습니다.

계정 AccountId

aws ecr get-login-password --region 리전코드 | docker login --username AWS --password-stdin 어카운트아이디.dkr.ecr.리전코드.amazonaws.com

 

3. 리포지토리 생성

※ 참고

리전 정보를 입력하지 않으면 디폴트 리전으로 설정되어 생성되기 때문에 주의해주시길 바랍니다.

aws ecr create-repository \
    --repository-name hello-repository \
    --image-scanning-configuration scanOnPush=true \
    --region region

ECR에 이미지 푸시하기

1. 테스트 용 도커 파일 작성 후 빌드

 

테스트용 도커 파일

FROM public.ecr.aws/docker/library/ubuntu:18.04

# 사용할 패키지 다운로드
RUN apt-get update && \
 apt-get -y install apache2

# Hello World를 출력하고 /var/www/html위치에 index.html에 생성 후 추가합니다.
RUN echo 'Hello World!' > /var/www/html/index.html

# 아파치 설정
RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \
 echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \
 echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ 
 echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ 
 chmod 755 /root/run_apache.sh

# 80번 포트로 포워딩합니다.
EXPOSE 80

# 설정했던 아파치 설정 쉘스크립트  실행
CMD /root/run_apache.sh

도커 빌드 명령어

docker -t imageName:tagName path와 같은 구조의 명령어를 입력하게 되면 해당 도커파일을 토대로 빌드하여 이미지를 생성하게 된다.

docker build -t hello-world .

2. 도커 이미지 조회

docker images

출력 결과

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
hello-world         latest              e9ffedc8c286        4 minutes ago       241MB

3. 도커 이미지 태그

아래 예시와 같이 태그를 해주지 않으면 푸시할 리포지토리 주소를 찾지 못하기 때문에 ECR에 생성했던 리포지토리를 경로를 지정해야한다

 

예시
docker tag hello-world:latest 12345678.dkr.ecr.ap-northeast-2.amazonaws.com/hello-repository

 

docker tag 이미지이름:latest ECR리포지토리주소

4. 도커 이미지 푸시

만약 푸시하는데 문제가 발생했다면 선택2 에서의 권한이 인증되지 않았을 가능성이 있기 때문에 ecr 로그인 후 재시도를 해본다.

docker push 123456789.dkr.ecr.ap-northeast2.amazonaws.com/hello-repository

5. 도커 이미지 풀

이미지를 내려받고 싶을 때에는 아래와 같은 명령어를 통해 내려받을 수 있다.

docker pull 123456789.dkr.ecr.ap-northeast-2.amazonaws.com/hello-repository:latest