전공영역 공부 기록

FastAPI를 이용한 docker-compose API 개발 3편

악분 2021. 8. 9. 15:46
반응형

프로젝트 글 모음

1편: https://malwareanalysis.tistory.com/137

2편: https://malwareanalysis.tistory.com/138

3편: https://malwareanalysis.tistory.com/139

 

 

3편에서 다루는 내용

2편에서 만들었던 fastapi 프로젝트를 도커 컨테이너로 배포하는 과정을 설명합니다.

 

영상으로도 만나볼 수 있습니다.

https://youtu.be/g85_Mf9bL0Y

 


1. 선수지식

도커와 dockerfile을 다루는 방법을 알고 계셔야합니다.

이 글에서는 도커 명령어, dockerfile을 만드는 방법을 다루지 않습니다.

 

 

2. dockerfile 생성

fastapi 공식문서에서 제공하는 템플릿을 참조하여 dockerfile을 생성합니다.

공식문서: https://fastapi.tiangolo.com/deployment/docker/#raspberry-pi-and-other-architectures

 

2.1 최종 dockerfile 

공식 템플릿과 다른 점은 ①workdir설정 ②파이썬 패키지 설치와 ③컨테이너가 실행 될 때 실행되는 명령어(CMD)입니다.

FROM python:3.7

COPY ./app /app
WORKDIR /app

RUN pip install -r requirements.txt

EXPOSE 80

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

 

2.2 workdir 설정

이 프로젝트는 실행에 필요한 리소스가 app폴더 하나이기 때문에 workdir을 "/app"으로 설정했습니다.

/app은 COPY명령어로 복사된 위치입니다.

 

2.3 파이썬 패키지 설치

애플리케이션 기능이 추가 될 때마다 필요한 파이썬 패키지 목록이 늘어납니다. 그러므로 requirements.txt에 있는 파이썬 패키지 목록을 설치하도록 변경했습니다.

 

 

2.4 CMD 수정

컨테이너가 실행될 때 uvicorn으로 fastapi를 실행합니다. 공식 템플릿은 app폴더 안에 main.py를 하는 구조입니다. 하지만, 저는 workdir을 /app으로 수정했으므로 app.main:app을 main:app으로 수정했습니다.

 

 

3. 도커 빌드

도커가 설치된 환경에서 docker build명령어를 실행하면 도커 컨테이너가 생성됩니다. 저는 컨테이너 이미지를 fastapi:v1으로 설정했습니다.

docker build -t fastapi:v1 .

그림1 docker build 성공

 

 

4. fastapi 컨테이너 실행

docker build를 실행한 곳에서, docker run으로 fastapi 컨테이너를 실행할 수 있습니다. 주의할 점은 포트포워딩 옵션을 설정해줘야 합니다. 아래 예제에서는 12332포트를 포워딩했습니다. 

docker run --rm -p 12332:80 fastapi:v1

그림2 컨테이너 실행 성공

 

포워딩한 포트로 요청을 날리면 helloworld 응답이 브라우저에 보입니다.

반응형