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 관련해서도 글을 작성해 보겠습니다.