Docker

Docker上のFastAPIをVSCodeからデバッグする方法

この記事では、Dockerを使用してFastAPIアプリケーションをVSCodeからデバッグする手順を紹介します。以下の手順に従って、効果的なデバッグ環境をセットアップしましょう。

デバッグ準備

ソースコードのディレクトリ構造

アプリケーションのディレクトリ構造は次のようになっていることを前提とします。

Docker-debug
 ┣ .vscode
 ┃ ┗ launch.json
 ┣ backend
 ┃ ┣ main.py
 ┃ ┗ requirements.txt
 ┣ docker-compose.yml
 ┗ Dockerfile

main.pyには最低限の処理を記述します

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    message = "Hello World"
    return {"message": message}

requirements.txt内には、必要なパッケージ名とバージョンを指定します。FastAPIとuvicornの特定バージョンが記述されていることを確認してください。

fastapi==0.63.0
uvicorn[standard]==0.13.3

launch.jsonの作成

まず、プロジェクトのルートディレクトリに.vscodeディレクトリを作成し、その中にlaunch.jsonファイルを作成します。

このファイルは、VSCodeのデバッグ構成を設定するためのものです。

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: Remote Attach",
      "type": "python",
      "request": "attach",
      "port": 5678,
      "host": "localhost",
      "pathMappings": [
        {
          "localRoot": "${workspaceFolder}/backend",
          "remoteRoot": "/app"
        }
      ]
    }
  ]
}

この設定では、リモートデバッグを行うための構成が定義されています。

ローカルのファイルとDocker内のファイルとの対応関係をpathMappingsで指定しています。

Dockerfileの作成

次に、FastAPIアプリケーションをDocker内で実行するためのDockerfileを作成します。

FROM python:3.8
COPY ./backend /app/
WORKDIR /app/
RUN pip install -r requirements.txt
CMD uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

このDockerfileでは、Python 3.8ベースのイメージを使用し、アプリケーションファイルと必要なファイルをコンテナ内にコピーし、pip install で必要な依存関係をインストールしています。

docker-compose.debug.ymlの作成

次に、docker-compose.debug.ymlファイルを作成します。

このファイルは、デバッグ用のDockerコンテナを設定するためのものです。(ファイル名はdocker-compose.ymlでも構いません。デバッグ用とわかりやすいようにしています)

services:
  app:
    build: .
    command:
      [
        "sh",
        "-c",
        "pip install debugpy && python -m debugpy --wait-for-client --listen 0.0.0.0:5678 -m uvicorn main:app --reload --host 0.0.0.0 --port 8000",
      ]
    volumes:
      - ./backend/:/app
    ports:
      - 8000:8000
      - 5678:5678

この設定では、debugpyを使用してデバッグクライアントとの接続を待ち、FastAPIアプリケーションをリロードモードで実行します。

デバッグ用のため、debugpyはrequirements.txtには記載せず、直接コマンドをたたくようにしています。

デバッグの開始

docker compose up

ターミナルで以下のコマンドを実行して、デバッグ用のDockerコンテナを起動します。

docker-compose -f docker-compose.debug.yml up

Run and Debug

コンテナを立ち上げたら、VSCodeでデバッグを開始します。

VSCodeでプロジェクトを開き、デバッグビューを表示します。”Run and Debug”オプションを選択し、設定したデバッグ構成(Python: Remote Attach)を選択します。

※F5でデバッグ開始することもできます。

ブレークポイントをセットして、http://localhost:8000にアクセスすると、、、

うまくデバッグできていることが確認できました。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です