📑

DockerでFastAPIの環境を作ってGETするまで

2022/06/16に公開

FastAPIを触りたかったので、取り敢えずDockerで環境を作る。

公式ドキュメント

Dockerを使用したデプロイ方法は公式にドキュメントが用意されているので、それを参考にする。

https://fastapi.tiangolo.com/ja/deployment/docker/

プロジェクト構成

sample_project
├── app
│   └── main.py
├── docker-compose.yml
├── Dockerfile
└── requirements.txt

app

公式ドキュメントからコピペ。[1]

main.py
from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

docker-compose.yml/Dockerfile/requirements.txt

docker-compose.yml
version: "3.0"

services:
  api:
    container_name: "api"
    volumes:
      - ./app: /app
    build: .
    ports:
      - 8080:8080
  • buildはDockerfileのあるディレクトリを指定する。今回は同じディレクトリにあるので「build: .」
  • volumesでapp配下(今回の場合はmain.py)をマウントする。
  • ポートは8080を指定する。
Dockerfile
FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt

COPY ./app/ .

CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "8080"]
  • Pythonは3.9-slimを使用する。
  • requirements.txtをコピーして、必要なパッケージをインストールする。
  • app配下(今回の場合はmain.py)をコピーして、uvicorn[2]でデプロイする。
  • uvicornは--reloadを指定しておくとmain.pyを変更した際に再起動しなくて良い。
requirements.txt
fastapi
uvicorn
  • 必要なパッケージを記載しておく。

起動

docker-compose up

以下の3つにアクセス可能。

停止

docker-compose down

脚注
  1. FastAPI コードの作成 ↩︎

  2. Uvicorn ↩︎

  3. FastAPIの機能 ↩︎

Discussion