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 한 줄을 추가해주면 된다.
감사합니다.
'Dev > Docker' 카테고리의 다른 글
docker image push to github (0) | 2023.10.18 |
---|