Docker를 사용하여 경량 FastAPI 개발 환경 구축

소개



최근 FastAPI를 사용할 기회가 많았고, Docker로 빨리 빌드하고 일회용하고 싶었기 때문에
메모로서 경량으로 구축하는 방법을 남기고 싶습니다.

준비


  • Docker 및 Docker Compose를 사용할 수있는 환경

  • 버전
    $ docker --version
    Docker version 19.03.8, build afacb8b7f0
    
  • 파일 구성은 이런 식으로 합니다

  • 파일 구성
    .
    ├── Dockerfile
    ├── docker-compose.yml
    ├── main.py
    └── requirements.txt
    

    출처



    여기에서 clone 할 수 있습니다.
    htps : // 기주 b. 코 m / 산토 씨 / 사 mp ぇ ふぁ

    Dockerfile



    alpine 기반으로 만들고 있습니다.

    Dockerfile
    FROM python:3.8-alpine
    
    WORKDIR /app
    
    COPY requirements.txt .
    # コンテナ内で必要なパッケージをインストール
    RUN apk add --no-cache build-base \
     && pip install --no-cache-dir --trusted-host pypi.python.org -r requirements.txt \
     && apk del build-base
    
    COPY main.py .
    EXPOSE 8000
    # FastAPIを8000ポートで待機
    CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "8000"]
    

    Docker Compose



    docker-compose.yml
    version: "3.0"
    
    services:
      # FastAPI
      api:
        container_name: "api"
        build: .
        restart: always
        tty: true
        ports:
          - 8000:8000
    

    필요한 패키지를 정리합니다.



    requirements.txt
    uvicorn
    fastapi
    

    샘플 코드



    FastAPI 문서 에 있는 샘플 코드를 준비했습니다.

    main.py
    from fastapi import FastAPI
    
    app = FastAPI()
    
    
    @app.get("/")
    def read_root():
        return {"Hello": "World"}
    

    실행


    $ docker-compose up -d --build
    

    Docker Image 크기 확인


  • 알파인 기반 이미지 크기
  • docker images | grep api
    latest              bff0158b61ca        29 minutes ago      275MB
    
  • 본가의 Image 크기

  • 본가님 을 참고로 구축한 결과입니다
    $ docker images | grep api
    latest              878110f2207f        11 seconds ago      1.02GB
    

    본가에 비해 3.6배 줄일 수 있음을 알 수 있습니다.

    동작 확인



    FastAPI로 생성된 API는 Swagger에서 자동으로 문서화됩니다.

    Swagger에서 살펴보기


    ドメイン/docs에 액세스하면 문서를 볼 수 있습니다.



    API 두드려보기



    curl로 두드리면 이런 느낌으로 돌아옵니다

    결과
    $ curl localhost:8000
    {"Hello":"World"}
    

    결론



    이번에는 alpine 기반으로 경량의 개발 환경을 구축해 보았습니다.

    본가보다 3.6배 경량이 되기 때문에, 일회용에는 충분한 환경이라고는 생각합니다.
    최근에는 Netflix를 시작해 다양한 프로젝트에서 FastAPI가 사용되기 시작했기 때문에,
    아직 사용하지 않은 사람은 꼭 사용해보세요!
  • Netflix OSS: htps : // 네 tf ぃ x 로 chbぉ g. 코 m / 인 t 로즈 신 g ぢ s 빠 tch - 4b8 A2 A 8072

  • 참고 사이트


  • 본가님 : h tps : // / 후스 타피. 치안고. 코m/
  • 좋은 웹페이지 즐겨찾기