4) FastAPI on Docker
Chapter Preview
목표
- 앞서 작성한 API 를 Docker 를 이용하여 실행합니다.
스펙 명세서
- 앞서 Pydantic 을 이용하여 수정한 API 를 서버로 실행하기 위해 Dockerfile 을 작성합니다.
- Base image는
amd64/python:3.9-slim
을 사용합니다. crud_pydantic.py
를 이용합니다.- 포트는 기본 포트인 8000번 포트를 이용합니다.
- Base image는
http://localhost:8000/docs
에 접속하여 앞서 수행한 시나리오가 제대로 작동하는지 확인합니다.
해당 파트의 전체 코드는 mlops-for-mle/part5/ 에서 확인할 수 있습니다.
part5
├── Dockerfile
├── Makefile
├── crud_path.py
├── crud_pydantic.py
├── crud_query.py
├── main.py
├── multi_param.py
├── path_param.py
└── query_param.py
1. Dockerfile 작성
1.1 Dockerfile
Dockerfile 을 이용하여 앞서 Pydantic 을 이용하여 수정한 API 를 작동시킬 수 있는 API 서버의 Docker 이미지를 만들어보겠습니다.
FROM amd64/python:3.9-slim
WORKDIR /usr/app
RUN pip install -U pip \
&& pip install "fastapi[all]"
COPY crud_pydantic.py crud_pydantic.py
CMD ["uvicorn", "crud_pydantic:app", "--host", "0.0.0.0", "--reload"]
- RUN :
pip
를 먼저 업데이트한 후에fastapi[all]
을 설치합니다.
- COPY :
- Pydantic 을 이용하여 수정한 API 의 코드가 담겨 있는
crud_paydantic.py
를 컨테이너 내부로 복사합니다.
- Pydantic 을 이용하여 수정한 API 의 코드가 담겨 있는
- CMD :
- 컨테이너가 실행될 때 수행할 명령어의 기본값을 적어줍니다.
- 여기서는
uvicorn
을 이용해crud_pydantic.py
에서 만든 FastAPI 의 객체app
을 실행해 줍니다.
1.2 Build
작성한 Dockerfile 을 이용해 이미지를 build 합니다.
이미지 이름은 part5-api-server
로 하겠습니다.
docker build -t part5-api-server .
이미지가 잘 생성되었는지 확인합니다.
docker image ls
다음과 같이 part5-api-server
이미지가 잘 생성되었음을 확인할 수 있습니다.
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
part5-api-server latest 3dec4bf727fe 3 hours ago 249MB
1.3 Run
이제 build 한 이미지를 실행해 보겠습니다.
docker run -d \
--name api-server \
-p 8000:8000 \
part5-api-server
- --name :
- 컨테이너의 이름을
api-server
로 설정합니다.
- 컨테이너의 이름을
- -p :
- 포트 포워딩을
8000:8000
으로 설정합니다.
- 포트 포워딩을
이제 컨테이너가 잘 실행되고 있는지 확인합니다.
docker ps
위의 명령어를 실행해보면 api-server
라는 이름을 가진 컨테이너가 실행되고 있음을 확인할 수 있습니다.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb72ccf8fb47 part5-api-server "uvicorn crud_pydant…" 13 minutes ago Up 13 minutes 0.0.0.0:8000->8000/tcp api-server
2. API 서버 접속하여 작동 확인
2.1 작동 확인
이제 FastAPI 를 통해 만든 API 서버가 잘 작동하는지 확인해 보겠습니다.
API 서버 컨테이너를 실행할 때 포트 포워딩을 8000:8000
으로 했으므로 8000번 포트로 접속하면 API 서버로 접속할 수 있습니다.
http://localhost:8000/docs
에 접속하면 다음과 같이 접속이 되는 것을 확인할 수 있습니다.
[그림 5-9] 작성한 API의 Swagger UI 화면
[그림 5-6]의 화면에서 앞서 수행한 시나리오와 같은 다양한 작업을 해 보면, 만든 API 가 제대로 작동하는 것을 확인할 수 있습니다.
2.2 컨테이너 종료
작동이 잘 되는 것을 확인한 후에는 다음 실습을 위해 컨테이너를 종료해 줍니다. 다음의 명령어를 통해 종료할 수 있습니다.
docker rm --force api-server