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서버가 올라갔다!
(올라간 프로젝트)
'Soma' 카테고리의 다른 글
MSA 구조를 Monolithic 구조로 변경하기 #1: EC2 생성과 연결 (0) | 2024.12.23 |
---|---|
pytest.fixture를 이용한 테스트 (0) | 2024.06.14 |
#1 별찍기 시각화 시도 (0) | 2024.05.18 |
2024년 소프트웨어 마에스트로 15기 합격 후기 (8) | 2024.03.30 |
2024년 소프트웨어 마에스트로 15기 면접 후기 (0) | 2024.03.16 |