이창윤
이창윤 백엔드 개발자

가상환경 설정없이 Docker Compose로 FastAPI 개발환경 만들기

가상환경 설정없이 Docker Compose로 FastAPI 개발환경 만들기

가상환경 설정없이 Docker Compose로 FastAPI 개발환경 만들기

간단 FastAPI 설정

구조는 아래처럼 기본 구성

1
2
3
4
5
6
7
.
├── app
│   ├── __init__.py
│   └── main.py
├── Dockerfile
├── docker-compose.yml
└── requirements.txt
  • requirements.txt
1
2
3
fastapi>=0.68.0,<0.69.0
pydantic>=1.8.0,<2.0.0
uvicorn>=0.15.0,<0.16.0
  • app/init.py 는 빈파일
  • app/main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
    return {"item_id": item_id, "q": q}

Dockerfile 만들기

python3.10 기준으로 만들기 위해서 3.10 이미지를 사용하고 아래 두줄은 만약 도커로 배포를 한다면 주석해제하고 사용하면 된다.

도커의 역할은 3.10 파이썬 이미지로 필요한 라이브러리를 설치하는 것!

1
2
3
4
5
6
7
8
9
10
11
FROM python:3.10

WORKDIR /code

COPY ./requirements.txt /code/requirements.txt
 
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
 
#COPY ./app /code/app
 
#CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]

Docker Compose 만들기

도커로 python3.10에 필요한 라이브러리 (FastAPI 등등) 설치가 끝났으니 로컬 파일로만 실행해주면 된다.

그럼 local PC 에디터에서 수정하면 바로 반영이 되어 확인이 가능하다.

1
2
3
4
5
6
7
8
9
10
version: "3.7"

services:
  fastapi:
    image: fastapi
    command: uvicorn app.main:app --host 0.0.0.0 --port 8080 --reload
    ports:
      - 8080:8080
    volumes:
      - ./app:/code/app

설정이 비교적 많지않다. 원하는 포트 설정을 해주면되고 uvicorn에서는 파일 변경이 일어나면 재시작을 하기 위해 –reload를 넣어준다.

volumns에서는 app폴더에서 수정이 이뤄지면 컨테이너 code/app에도 연결되어 반영되게하기 위해 ./app:/code/app으로 설정한다.

설정은 -끝-

사용하기

Docker build 하기

1
docker build -t fastapi .

docker-build

컨테이너 띄우기

1
docker-compose up

docker-compose

localhost에서 확인하기

예제에서는 8080 포트로 설정했기 때문에 http://localhost:8080에 들어가서 확인해본다.

localhost

파일 수정해보기

app/main.py에서 World를 World!로 수정해보면 .. 아래와같이 file detect하고 재시작하는것을 볼 수 있다.

fastapi-reload

참고 문서] https://fastapi.tiangolo.com/deployment/docker/

comments powered by Disqus