앞서 작성했던 파일들로 도커 이미지를 만든 후 컨테이너로 띄워보려고 한다.
예시 코드는 깃허브 레포지토리에 업로드 되어 있다.
📦FastAPI_example
┣ 📜Dockerfile
┣ 📜__init__.py
┣ 📜crud.py
┣ 📜database.py
┣ 📜main.py
┣ 📜models.py
┣ 📜requirements.txt
┗ 📜schemas.py
#requirements.txt
fastapi[all]
sqlalchemy
FROM python:3.9
COPY . /src
WORKDIR /src
RUN apt-get update && apt-get install -y sqlite3
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
디렉토리 내에 있는 모든 파일들을 src 경로로 복사하고 8000번 포트로 요청을 받아들일 예정이다.
도커 데몬을 먼저 실행 후에 빌드해주어야 한다.
docker build -t {이미지 이름} .
docker run --name {띄울 컨테이너 이름} -d -p {외부 포트}:{컨테이너 내부 포트} {띄울 이미지 이름}
실행 옵션은 잘 정리되어 있는 다른 블로그의 글을 참고하도록 하자.
ImportError: attempted relative import with no known parent package
만약 위와 같은 에러가 난다면
from . import crud, models, schemas
위처럼 되어 있는 import 경로를
import crud, models, schemas
이렇게 바꿔주자.
위처럼 CLI에서도 확인할 수 있고, 만약 docker desktop app이 설치되어 있다면
GUI로도 확인할 수 있다.
localhost:{바인딩한 외부 포트}
가 API의 엔드포인트가 될 것이고, 아래처럼 Swagger UI도 확인할 수 있다.
Swagger UI가 제공해주는 API 명세서를 바탕으로 유저 생성 요청을 보내보았다.
보다시피 응답 코드 200과 함께 요청이 잘 전송되는 것을 확인할 수 있다.
GUI에서도 요청 로그들이 잘 찍히는 것을 확인할 수 있다.
DB를 조회하기 위해서는 우선 터미널 환경으로 접속해야 한다.
GUI 환경에서는 컨테이너를 클릭한 후 Terminal 탭으로 들어가면 되고,
CLI 환경에서는 아래와 같은 명령어로 접속가능하다.
docker exec -it {접속할 컨테이너명} sh
실행 중인 컨테이너의 이름은 docker ps
로 조회 가능하다.
아래처럼 간단히 DB에 접속할 수 있다.
SQL 명령어 그대로 조작이 가능하다.
.quit
으로 sqlite를 나갈 수 있고 exit
으로 도커 컨테이너의 터미널에서 나갈 수 있다.