初めに
ChatGPTに聞いた回答そのままですが完璧だったので掲載
以下回答
DockerでFastAPIを実行し、コードの変更をリアルタイムで反映させるには、いくつかの方法があります。その一つは、ホストマシン上のファイルシステムをDockerコンテナにマウントし、FastAPIのリローディング機能を使用する方法です。
以下に、その手順を示します。
1. FastAPIプロジェクトの構成
まず、基本的なFastAPIプロジェクトを準備します。
ディレクトリ構造
my_fastapi_project/
├── app/
│ ├── main.py
├── Dockerfile
├── requirements.txt
├── docker-compose.yml
app/main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
requirements.txt
fastapi
uvicorn
2. Dockerfileの作成
次に、FastAPIアプリケーションを実行するためのDockerfile
を作成します。
Dockerfile
FROM python:3.9-slim
# 作業ディレクトリを設定
WORKDIR /app
# 依存関係をインストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# アプリケーションのコードをコピー
COPY ./app /app/app
# FastAPIアプリケーションを起動
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]
--reload
オプションは、コードの変更を監視し、自動的にリロードするためのものです。
3. docker-compose.ymlの作成
開発時にホストマシンのコードをコンテナにマウントするために、docker-compose.yml
ファイルを作成します。
docker-compose.yml
version: "3.8"
services:
web:
build: .
ports:
- "8000:8000"
volumes:
- ./app:/app/app
4. Dockerコンテナのビルドと起動
次に、Dockerコンテナをビルドして起動します。
docker-compose up --build
このコマンドは、Dockerfile
を使用してコンテナをビルドし、docker-compose.yml
の設定に従ってコンテナを起動します。
5. リアルタイムでのコードの更新
ホストマシン上のmy_fastapi_project/app
ディレクトリ内のファイルを編集すると、変更がリアルタイムでDockerコンテナに反映され、FastAPIが自動的にリロードされます。これにより、変更を即座にテストすることができます。
まとめ
この手法を使用すると、FastAPIのコード変更をリアルタイムで反映させることができます。開発中は、ホストマシンのファイルシステムをコンテナにマウントし、FastAPIの自動リロード機能を利用することで、効率的に開発を進めることができます。
追記
ウィンドウを閉じるとdockerコンテナが終了してしまうので-dを付ける
docker-compose up --build -d
終了するときは以下
docker-compose down