프로젝트 글 모음
1편: https://malwareanalysis.tistory.com/137
2편: https://malwareanalysis.tistory.com/138
3편: https://malwareanalysis.tistory.com/139
3편에서 다루는 내용
2편에서 만들었던 fastapi 프로젝트를 도커 컨테이너로 배포하는 과정을 설명합니다.
영상으로도 만나볼 수 있습니다.
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 .
4. fastapi 컨테이너 실행
docker build를 실행한 곳에서, docker run으로 fastapi 컨테이너를 실행할 수 있습니다. 주의할 점은 포트포워딩 옵션을 설정해줘야 합니다. 아래 예제에서는 12332포트를 포워딩했습니다.
docker run --rm -p 12332:80 fastapi:v1
포워딩한 포트로 요청을 날리면 helloworld 응답이 브라우저에 보입니다.
'전공영역 공부 기록' 카테고리의 다른 글
SQL Achemy 1편 - 원리와 쿼리 실행 (0) | 2021.08.14 |
---|---|
mariadb 도커 컨테이너 실행 (0) | 2021.08.09 |
FastAPI를 이용한 docker-compose API 개발 2편 (0) | 2021.08.09 |
FastAPI를 이용한 docker-compose API 개발 1편 (0) | 2021.08.09 |
쿠버네티스에서 권한이 제한된 개발자 계정 발급 3편 (0) | 2021.08.04 |