먼저 적당한 위치에 프로젝트 디렉터리를 생성하고, 해당 디렉터리에 예제 두개의 파일을 준비한다.
docker-compose.yaml
services:
demo-app:
build: .
volumes:
- .dockervenv:/src/.venv
- .:/src
ports:
- 8000:8000 # 호스트 머신의 8000번 포트를 docker의 8000번 포트에 연결
environment:
- WATCHFILES_FORCE_POLLING=true # 환경에 따라 핫 리로드를 위해 필요함
db:
image: mysql:8.0
platform: linux/x86_64
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
MYSQL_DATABASE: 'demo'
TZ: 'Asia/Seoul'
volumes:
- mysql_data:/var/lib/mysql # mysql_data라는 볼륨을 MySQL 데이터베이스 경로에 마운트
command: --default-authentication-plugin=mysql_native_password
ports:
- 33306:3306
volumes:
mysql_data: # 이 부분은 전역적으로 정의된 볼륨을 의미
docker-compose.yaml:
docker compose 정의 파일. 그 안에 Dockerfile을 호출하여 Docker 컨테이너를 빌드한다.
Dockerfile
FROM python:3.11-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /src
# Poetry 설치
RUN pip install "poetry==1.6.1"
RUN pip install fastapi uvicorn sqlalchemy pymysql
# poetry의 정의 파일 복사
COPY pyproject.toml* poetry.lock* ./
# poetry로 라이브러리 설치
RUN poetry config virtualenvs.in-project true
RUN if [ -f pyproject.toml ]; then poetry install --no-root; fi
# uvicorn 서버 실행
ENTRYPOINT ["poetry", "run", "uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]
Dockerfile:
Docker 정의 파일. 사용할 공개 이미지를 가져와, Poetry를 통해 패키지 정의 파일인 pyproject.toml을 기반으로 각 파이썬 패키지를 설치한다.