차곡차곡 성 쌓기
article thumbnail

1. ECR이란?

  •  amazon Elastic Container Registry(Amazon ECR)
  •  컨테이너 이미지 레지스트리 서비스
  • AWS의 IAM 기반으로 리소스 기반 권한이 있는 개인/ 퍼블릭 저장소 지원

 

private 저장소와 public 저장소가 존재하는데 권한 부여하는게 더 까다로워 질까봐 public 저장소를 택했다. 

public ECR

  • AWS 계정마다 public registry가 제공됨
  •  public resitry에 image respository를 만들고 이미지를 저장
  • image respository에 이미지를 푸시하기 전에 AWS 사용자로 public registry에 인증해야함.
  • 푸시한 이미지를 개발 시스템에서 로컬로 사용하거나 Amazon ECS 작정 정의 및 Amazon EKS 사양에서 사용할 수 있음

 

2. ECR 생성하기

가장 먼저 도커 이미지들을 저장할 수 있도로 Pulbic registry에서 리포지토리를 생성해준다. 

 

리포지토리 생성 후 '리포지토리 이름'을 누르고 '푸시 명령 보기'를 누르면 친절하게 명령어가 다 나온다.

 

차례대로 따라해보자.

 

3. AWS CLI 자격 증명하기

AWS CLI에서 리소스를 다루기 위해서는 자격 증명이 필요하다.

 

  • AWS Management Console -> 보안 자격 증명 접속
  • 새 액세스 키 만들기
  • 키 파일 다운로드
  • 화면에 보여지는 access key와 secret access key는 다시는 못보니 어딘가에 저장해야 한다.

 

이제 터미널을 열어서 다음과 같이 명령어를 입력한다. 저장한 access key와 secret access key를 복사하여 잘 붙여넣는다.

 

`aws sts get-caller-identity` 명령어를 통해 자격증명이 활성화 되었는지 확인한다. Account가 내 계정 id와 같으면 잘 된것이다!

 

 

 

4. ECR에 접근 가능한 Docker client 승인 토큰 받기

이제 AWS CLI를 이용할 수 있게 됐으니 아래 창에서 1번 명령어를 실행해준다.

 

 

5. Docker 이미지 ECR에 푸시

ECR에 올릴 Docker 이미지를 만들어준다.

 

우선 DockerFile을 생성해줘야 하는데 각 프로젝트에 맞게 파일을 작성해줘야 한다. 해당 프로젝트는 FastAPI를 사용하고 라이브러리 버전 관리로는 Poetry를 사용해서 아래와 같이 빌드 파일을 만들어줬다.

 

DockerFile

FROM python:3.11-alpine

WORKDIR /home/assist
RUN pip install poetry

COPY pyproject.toml /home/assist
COPY poetry.lock /home/assist
COPY .env /home/assist

COPY app /home/assist/app

RUN poetry install --no-root

EXPOSE 8000

ENTRYPOINT [ "poetry" ,"run", "uvicorn

 

  • 도커 빌드
docker build --platform linux/amd64 -t analysis-server .

 

참고로 `--platform linux/amd64` 명령어는 맥북에서 빌드하다 보니 EC2의 리눅스와 호환이 안되어서, 리눅스용 아키텍처로 빌드해주기 위해서 추가했다. 맥북에서 빌드하면 ARM 아키텍처용으로 빌드되는데 M2칩이 ARM인 것이 아니라 ARM 호환 CPU라서 그렇다고 한다.

 

-t는 -tag의 약아로 이미지의 이름과 태그를 지정할 때 사용된다. 뒤에 태그가 붙지 않으면 디폴트로 `:lastst`가 붙는다. 그래서 analysis-server나 analysis-server:lastst가 같은 의미이다.

 

  • 태그 재지정
docker tag analysis-server:latest public.ecr.aws/u4v5k3d0/analysis-server:latest

 

 

  • ecr 리포지토리에 푸시
docker push public.ecr.aws/u4v5k3d0/analysis-server:latest

 

 

6. EC2에서 실행

터미널로 EC2에 원격으로 다시 접속한다.

 

- AWS CLI 설치

AWS CLI를 사용하기 위해 AWS CLI를 설치한다. 

sudo snap install aws-cli --classic

 

원래 cli2를 설치해야하는데 계속 충돌 문제가 나서 그냥 classic 버전을 설치했다. 

 

- ECR에 접근 가능한 Docker client 승인 토큰 받기

다시 푸시 명령어의 1번 명령어를 실행해준다.

 

- 도커 pull 받기

마지막으로 생성한 태그 이름대로 도커를 pull 받아온다

sudo docker pull public.ecr.aws/u4v5k3d0/assist-server

 

다운받은 이미지를 확인해보자.

sudo docker images

 

 

7.  EC2에서 실행

최종적으로 도커를 실행해준다. 백그라운드로 돌려주기 위해 -d 옵션을 주고 호스트의 8000 포트가 컨테이터의 8000 포트로 연결되도록 했다.

docker run -d -p 80:8000 public.ecr.aws/u4v5k3d0/assist-server:latest

 

이로써 무사히 EC2에 FastAPI서버가 올라갔다! 

 

(올라간 프로젝트)

https://www.edupi.co.kr/

 

edupi

 

www.edupi.co.kr

 

profile

차곡차곡 성 쌓기

@nagrang

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!