[FastAPI] FastAPI docker container로 올리기

Jaeyeon Kim·2023년 6월 29일
1

FastAPI

목록 보기
4/4
post-thumbnail

앞서 작성했던 파일들로 도커 이미지를 만든 후 컨테이너로 띄워보려고 한다.

예시 코드는 깃허브 레포지토리에 업로드 되어 있다.

파일 구조

📦FastAPI_example
 ┣ 📜Dockerfile
 ┣ 📜__init__.py
 ┣ 📜crud.py
 ┣ 📜database.py
 ┣ 📜main.py
 ┣ 📜models.py
 ┣ 📜requirements.txt
 ┗ 📜schemas.py
#requirements.txt

fastapi[all]
sqlalchemy

Dockerfile

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에서도 요청 로그들이 잘 찍히는 것을 확인할 수 있다.

컨테이너 내에서 sqlite DB 조회하기

DB를 조회하기 위해서는 우선 터미널 환경으로 접속해야 한다.

GUI 환경에서는 컨테이너를 클릭한 후 Terminal 탭으로 들어가면 되고,
CLI 환경에서는 아래와 같은 명령어로 접속가능하다.

docker exec -it {접속할 컨테이너명} sh

실행 중인 컨테이너의 이름은 docker ps로 조회 가능하다.

아래처럼 간단히 DB에 접속할 수 있다.

테이블 및 스키마 조회하기

유저 테이블 모두 불러오기

SQL 명령어 그대로 조작이 가능하다.

나가기


.quit으로 sqlite를 나갈 수 있고 exit으로 도커 컨테이너의 터미널에서 나갈 수 있다.

profile
낭만과 열정으로 뭉친 개발자 🔥

0개의 댓글

관련 채용 정보