Dev/Docker

fastapi 배포 w/ docker

oxdjww 2023. 10. 18. 01:32
728x90
반응형

Intro

본 포스팅에서는 fastapi로 구축한 back-end server를 docker image를 통해 배포하는 방법에 대해 다룬다.

Configuration

  • Lang : python 3.11.4
  • Framwork : Fastapi

Dir Structure

프로젝트는 python의 내장모듈인 venv를 이용하여 구축했으며, 대략적으로 아래와 같은 디렉토리 구조를 가진다.

- bin
- lib
- src
    - api
    - database
    - schema
    - service
main.py

requirements

requirements.txt 파일을 루트 디렉터리 (/src)에 위치시켜, 파일 빌드 시 필요한 의존성을 추가한다.

uvicorn
fastapi

Dockerfile

Dockerfile을 통해 docker image를 생성하는 데에 필요한 요구사항을 정의한다.

FROM python:latest

WORKDIR /app/

COPY ./main.py /app/
COPY ./requirements.txt /app/

RUN pip install -r requirements.txt

CMD uvicorn --host=0.0.0.0 --port 8000 main:app

FROM python:latest : python은 최신 버전으로
WORKDIR /app/ : 컨테이너 빌드 시 파일을 복사해서 붙여넣을 디렉터리
COPY ./main.py /app/ : 좌측(./main.p) 파일을 컨테이너 빌드 시 우측(/app/)으로 복사한다는 의미
COPY ./requirements.txt /app : 좌측(.requirements.txt) 파일을 컨테이너 빌드 시 우측(/app/)으로 복사한다는 의미
RUN pip install -r requirements.txt : requirements.txt파일을 참조하여 pip package들을 추가한다는 의미
CMD uvicorn --host=0.0.0.0 --port 8000 main.app : uvicorn 명령어를 사용하여 쉘 커맨드로 서버를 배포하는 명령어

Build

$ docker build --tag 이름:태그 .

원하는 이름으로 빌드한다. 그리고 태그를 붙여준다.
일반적으로 1, 1.2등 버전을 명시한다.


Requirements 주의사항


python 기본 내장 라이브러리가 아닌, 다른 모듈이 프로젝트에서 필요할 경우 꼭 requirements에 포함해주어야 한다.

도커 이미지를 컨테이너화할 시에 이런 에러를 만날 수 있다.
requests 모듈은 파이썬 내장이 아니라, 따로 설치를 해주어야 하는 모듈이기 때문에 그렇다.

실제로 일반 IDE(vscode, pycharm)에서 request를 쓰려면 terminal에

pip install requests

를 해주어야 하는 것과 같은 원리이다.


`requirements`에 requests 한 줄을 추가해주면 된다.

감사합니다.

728x90
반응형

'Dev > Docker' 카테고리의 다른 글

docker image push to github  (0) 2023.10.18