개발놀이터

AWS ECR에 docker image push하기 본문

배포/AWS

AWS ECR에 docker image push하기

마늘냄새폴폴 2023. 6. 9. 16:23

이번 포스팅에선 AWS ECR에 도커 이미지를 푸쉬하는 방법에 대해서 자세히 포스팅해보도록 하겠습니다. 

 

이번 포스팅에선 AWS EC2가 있다고 가정하고 docker가 EC2에 설치되어있어야 합니다. 

 

순서를 대략적으로 말씀드리자면

 

  1. IAM 생성 및 정책 추가 (IAM 생성 시 주는 csv 파일을 반드시 가지고 있어야 함)
  2. AWS CLI 설치
  3. AWS CLI 프로필 설정
  4. Dockerfile 생성
  5. ECR로그인, docker image 빌드, docker image 태깅, docker push

 

그럼 한번 시작해보도록 하죠!

 

ECR에 docker image push

1. IAM 생성 및 정책 추가

이번 포스팅에선 IAM 생성에 대한 내용은 알려드리지 않습니다. IAM을 생성하는 방법은 구글링하시면 잘 나와있으니 그 방법을 따라 하시면 될 것 같습니다. 

 

IAM을 만드셨으면 이제 정책을 추가해야합니다. 

 

 

 

위의 스샷은 IAM 사용자를 클릭하면 볼 수 있는 화면입니다. 이후 권한 추가를 누르고?

 

직접 정책 연결을 선택하고 검색창에 AmazonEC2ContainerRegistryFullAccess 를 검색합니다. 

 

검색 결과를 선택하시고 디폴트 값으로 다음다음 눌러서 설정해주시면

 

 

 

이렇게 정책이 추가됩니다. 

 

2. AWS CLI 설치

AWS CLI 는 명령 프롬프트에서 명령어를 통해 AWS 자원에 접근하는 방법입니다. 

 

기본적인 AWS 생태계를 구축하고 계시다면 AWS 공식 사이트에서 조작하는 것이 좋지만 정교한 설정을 하기 위해서는 CLI가 있는 것이 더 편할 수 있습니다. 

 

우리는 EC2 즉, 리눅스 환경이기 때문에 리눅스만 보도록 하겠습니다. 

 

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install

$ aws --version
aws-cli/2.7.9 Python/3.9.11 Linux/5.13.0-51-generic exe/x86_64.ubuntu.20 prompt/off

$ rm -f awscliv2.zip # 설치 되었으면 zip은 지워주자. 용량이 여유롭지 못하다

 

만약 이미 설치가 되어있고 업데이트만 진행하고 싶은 경우에는 다음 명령어를 입력하면 됩니다. 

 

$ which aws
/usr/local/bin/aws

$ sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update

 

3. AWS CLI 프로필 설정

이 작업을 거치는 이유는 우리는 ECR 자원에 접근해야 하기 때문에 IAM으로 인증을 거쳐야 ECR 리포지토리에 접근할 수 있을 겁니다. 

 

Access Key와 Secret Key는 IAM을 생성할 때 다운 받았던 csv 파일에 있으니 그걸 그대로 치시면 됩니다. 

 

 

4. Dockerfile 생성

Dockerfile은 보통 프로젝트 위에 만드는 것이 일반적입니다. 

 

/myproject
    Dockerfile
    /myapp
        app.py
    requirements.txt

 

이런 구조의 프로젝트인 경우 Dockerfile은 저렇게 만드시면 됩니다. 

 

Dockerfile은 아래와 같이 만드시면 됩니다. 

 

FROM ubuntu:22.04

RUN apt-get update && \
    apt-get -y install apache2

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 'usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \
    chmod 755 /root/run_apache.sh

EXPOSE 80

CMD /root/run_apache.sh

 

보통 vim으로 만들고 위와같이 빈공간을 반드시 만들어주셔야 합니다. 스페이스바로 띄워서 줄을 맞추시면 됩니다. 

 

저 부분을 스페이스바로 띄워주셔야합니다. 

 

5. ECR 리포지토리 생성

AWS에 ECR을 치면

 

 

이걸 누르시면 됩니다. 

 

 

왼쪽 탭에서 Repositories에 들어간 다음 리포지토리 생성 누르시고 프라이빗으로 만드시면 됩니다. 이름은 자유롭게 해세요. 

 

6. 도커 빌드, 이미지 태깅, ECR 로그인, 이미지 푸시

#Docker Image Build
docker build -t ${IMAGE_NAME} .		// .(온점) 반드시 치셔야합니다. 

#Tagging Image
docker tag ${IMAGE_NAME}:latest ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${REPOSITORY_NAME}

#ECR Login
aws ecr get-login-password --region ${REGION} --profile ${PROFILE_NAME} | docker login --username AWS --password-stdin ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com

#Image Push
docker push ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${REPOSITORY_NAME}

 

${IMAGE_NAME} : 우리가 빌드할 이미지를 입력합니다. 

${ACCOUNT_ID} : IAM의 계정 ID를 입력하는데 

 

이렇게 치시면 account id를 보여줍니다. account id는 숫자로된 12자리 배열입니다. 

 

${REGION} : 자신의 지역을 입력합니다. 저의 경우는 ap-northeast-2 입니다. 

${PROFILE_NAME} : 아까 aws configure --profile ${profile_name} 에서 쳤던 프로필 이름을 입력합니다. 

${REPOSITORY_NAME} : ECR 에서 생성한 리포지토리 이름을 적습니다. 

 

위의 명령어를 모두 치면?

 

이렇게 도커 이미지가 들어오게 됩니다. 

 

 

마치며

이렇게 도커 이미지를 ECR에 저장하는 방법에 대해서 알아봤습니다. 

 

사실 단일 인스턴스에 프로젝트 규모도 크지 않다면 굳이 이용하지 않아도 되는 기능입니다. 물론 제 프로젝트도 단일 인스턴스에 프로젝트 규모가 크지 않아서 굳이 사용하지 않아도 됩니다.

 

하지만 저는 제 프로젝트를 MSA로 확장하고 싶은 욕구가 있기 때문에 MSA로 전환하기 위해서는 ECR의 존재가 반드시 필요했습니다. 

 

ECR은 반드시 사용하지 않아도 되는 기능이기 때문에 사용하시는데 있어서 잘 선택하시기 바랍니다. 

 

긴 글 마쳐보도록 하겠습니다. 오늘도 즐거운 하루 되세요~