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
2. AWS ECR 로그인
아래에서 region과 account code를 지정하여 로그인 합니다.
※ 참고
- 서울 리전의 코드는 ap-northeast-2
- Account Code는 위 상단의 내정보를 통해 확인할 수 있습니다.
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
'aws' 카테고리의 다른 글
AWS EC2 서버 장애 후기 (0) | 2023.06.24 |
---|---|
[AWS] VPC 구성부터 ECS 구축까지 (1) (1) | 2023.05.07 |
AWS EC2에서 웹드라이버 환경 설정. (0) | 2021.06.11 |
(AWS EC2)Mysql Server 설정 (0) | 2021.05.15 |
(Flask)AWS 원격접속 종료해도 홈페이지 접속유지 및 종료 (0) | 2021.05.01 |