Python/FastAPI

[FastAPI] FastAPI Docker 이미지 빌드와 배포

K.Seungmin 2024. 9. 17. 13:56

FastAPI를 통해 개발하면서 배포하는 방식중 하나인 도커파일을 만드는 방식에 대해서 알아보겠습니다. 도커 파일을 사용하면 매우 간단한 방식으로 배포할 수 있어서 매우 편리합니다. 먼저 Dockerfile은 아래와 같이 작성할 수 있습니다.

 

파일 구조 예시

.
├── app
│   ├── __init__.py
│   └── main.py
├── Dockerfile
└── requirements.txt

 

Dockerfile

# python 버전 설정
FROM python:3.9

# 디렉토리 설정
WORKDIR /code

# requiremets 파일 복사
COPY ./requirements.txt /code/requirements.txt

# 패키지 설치
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

# app 디렉토리 복사
COPY ./app /code/app

# 서버 실행
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]

저번 포스트에서 설명한 requirements.txt 파일을 생성하고 다음과 같은 파일 구조로 Dockerfile을 사용할 수 있습니다.

 

Docker image 생성 및 push

docker buildx build --platform linux/amd64,linux/arm64 -t {도커 아이디/이미지 이름:tag} --push .
여기서 buildx를 사용하는 이유는 amd64 환경과 arm64 환경 모두에서 작동하기 위해서입니다.
--push 옵션을 사용하면 이미지를 생서하고 바로 Docker hub에 업로드 할 수 있습니다.

 

Docker 파일 받아와서 실행하기

- 도커 이미지 불러오기

docker pull <유저 이름/이미지 이름:tag>
여기서 유저 이름은 해당 이미지를 업로드한 유저의 이름입니다.

 

- 도커 이미지 실행하기

docker run -d -p 80:80 {유저 이름/이미지 이름:tag}
-d : 백그라운드에서 실행
-p 80:80 : 호스트 80 포트와 컨테이너의 80포트를 바인딩

 

이제 FastAPI 서버가 실행됩니다. http:/localhost 로 서버에 접속할 수 있습니다.

 

정리

오늘은 간단하게 Docker를 사용해서 FastAPI를 배포하는 방법을 알아보았습니다. 상황과 기능에 따라서 파일 구조, Dockerfile을 수정하시면 될 것같습니다. 저는 도커 이미지를 하나 불러와서 실행하는 방식을 사용했는데 만약 postgresql 같은 DB를 함께 사용하신다면 docker-compose 파일을 사용해서 여러가지 이미지를 함께 실행시키는 방법도 있습니다. 다음에 docker-compose 관련해서도 글을 작성해 보겠습니다.