새소식

이것저것 개발노트

[FastAPI] [Chapter 4] Docker 이미지 만들기

  • -

01 docker compose 관련 파일 생성 

 

WSL로 VSCode에서 연결하여 리눅스환경에서 실습을 수행한다.

 

 

docker compose 관련 파일을 생성해 보자. 

 

먼저 적당한 위치에 프로젝트 디렉터리를 생성하고, 해당 디렉터리에 예제 두개의 파일을 준비한다.

 

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을 기반으로 각 파이썬 패키지를 설치한다. 

 

 

.dockervenv

Docker 내 .env 디렉터리에 대응하는 .dockervenv 디렉터리를 생성한다 

 

현재 프로젝트 디렉터리에 존재하는 디렉터리 구조 

.dockervenv 

Dockerfile

docker-compose.yaml

 

02 이미지 빌드 

이제 생성한 이미지를 빌드해 본다. 

> sudo docker compose build 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.