AWS ECR

홍석희·2023년 12월 25일
0
post-thumbnail

ECR(Elastic Container Registry)

Amazon ECR은 관리형 컨테이너 이미지 레지스트리 서비스
IAM 권한을 이용하여 리소스 기반 권한을 가진 프라이빗 레포지토리를 지원하여 EC2 인스턴스가 컨테이너 레포지토리 및 이미지에 접근할 수 있다

ECR 구성 요소

1. Registry

  • ECR private registry 하나에 여러 개의 레포지토리, 도커 이미지, Open Container Initiative(OCI) 이미지 등을 저장할 수 있다

2. 사용자 권한 토큰

  • 클라이언트는 ECR private registry에 AWS 사용자 인증 이후에 이미지 푸시 및 가져오기 가능

3. Repository

  • ECR 레포지토리에는 Docker 이미지, OCI 이미지 및 OCI 호환 아티팩트가 포함돼 있다

4. Repository policy

  • 레포지토리 정책을 사용하여 레포지토리 및 내부 컨텐츠에 대한 엑세스 제어 가능

5. 이미지

  • 레포지토리에 컨테이너 이미지를 푸시하고 가져올 수 있다.

EC2에 도커 설치

도커 공식 문서: https://docs.docker.com/engine/install/ubuntu/

이 포스트에서는 Ubuntu 환경에서의 Docker 설치를 수행한다
만약 다른 OS를 사용중이라면 위에 있는 도커 공식문서를 참고하자

충돌 가능한 패키지들 uninstall

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

Docker's apt repository를 사용하여 set up

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

Docker package 설치(최신버전)

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

1. 도커 이미지 생성

EC2 인스턴스(Ubuntu)에서 도커 이미지 생성하여 테스트

로컬에서 Dockerfile 생성

FROM ubuntu:latest

# Install dependencies
RUN apt-get update -y && \
    apt-get install -y apache2

# Install apache and write hello world message
RUN echo 'Hello World!' > /var/www/html/index.html

# Configure apache
RUN echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \
    echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \
    echo '/usr/sbin/apache2ctl -D FOREGROUND' >> /root/run_apache.sh && \
    chmod 755 /root/run_apache.sh

EXPOSE 80

CMD /root/run_apache.sh

docker build 명령어를 사용하여 도커 이미지 빌드

docker build -t hello-world .

docker image 명령어로 생성된 이미지 확인

docker images --filter reference=hello-world

docker run 명령어로 빌드된 이미지 실행

docker run -t -i -p 80:80 hello-world

2. 기본 registry 인증

AWS CLI 설치 후, 기본 registry에 대해 Docker CLI 인증 필요
registry 인증이 완료되어야 ECR을 통해 이미지를 푸시하고 가져올 수 있음

aws ecr get-login-password 명령어를 실행하여 인증

get-login-password(AWS CLI)

aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin {aws_account_id}.dkr.ecr.ap-northeast-2.amazonaws.com

region, aws_account_id 은 환경에 맞게 입력

3. repository 생성

푸시할 이미지를 저장할 repository를 생성

aws ecr create-repository \
    --repository-name hello-repository \
    --region ap-northeast-2

repository 이름, region 등은 환경에 맞게 입력

4. ECR에 이미지 푸시

Docker CLI를 통해 ECR에 이미지 푸시 시 만족해야 하는 조건

  • docker 1.7 이상의 버전
  • ECR 권한 부여 토큰
  • ECR repository가 있고 사용자가 푸시 권한이 있음

repository에 푸시할 이미지에 태그 지정

docker tag hello-world:latest {aws_account_id}.dkr.ecr.ap-northeast-2.amazonaws.com/hello-repository

이미지 푸시

docker push {aws_account_id}.dkr.ecr.ap-northeast-2.amazonaws.com/hello-repository

5. ECR에서 이미지 가져오기

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

6. 이미지 삭제

aws ecr batch-delete-image \
      --repository-name hello-repository \
      --image-ids imageTag=latest \
      --region ap-northeast-2

7. repository 삭제

aws ecr delete-repository \
      --repository-name hello-repository \
      --force \
      --region ap-northeast-2

트러블 슈팅

Ubuntu docker 권한 없음

permission denied while trying to connect to the Docker daemon socket at unix

위와 같은 에러 발생 시 다음 명령어를 통해 사용자를 docker group에 포함시킨다

$ sudo usermod -a -G docker $USER

시스템 재구동 시 id 명령어를 입력하면 docker 가 추가된 모습을 볼 수 있다

aws configure

ECR의 권한 토큰 발급을 위해 IAM 권한에 AmazonEC2ContainerRegistryFullAccess 이 필요

profile
개발 기록

0개의 댓글