📦

【FastAPI入門を参考】DockerでFastAPIの開発環境を作るまで

2024/08/09に公開

Docker周りの復習も兼ねて、以下の記事を参考に自分の気づき等を加えながらやったことを書いていきます。

https://zenn.dev/sh0nk/books/537bb028709ab9/viewer/bdf8a5

Docker Composeのインストール

以下サイトからDockerをインストールします。

https://www.docker.com/ja-jp/

Dockerイメージの作成

まずは開発するためのディレクトリを作成。

作成したそのディレクトリの中にDockerイメージを作成するための2つのファイルを作成する。

まずは一つ目の「docker-compose.yaml」というファイルを作成。

Docker Composeでコンテナを起動するためのファイル。

アプリケーションのサービス、ネットワーク、ボリュームなどを定義する場所。

services: # services作成したいサービス(コンテナ)を列挙する
  demo-app:
    #既存のDockerイメージからではなく
    #DockerfileからビルドするためDockerfileが置いてあるディレクトリを指定
    build: .

    #データをコンテナの外に保存するための設定項目
    #ホスト側のディレクトリとコンテナ内のディレクトリを結びつけをする(マウント)
    volumes:
      - .dockervenv:/src/.venv #ホスト側のディレクトリを意味する : コンテナ内のディレクトリを意味する
      - .:/src
    ports:
      - 8000:8000  # ホストマシンのポート8000 : docker内のポート8000

続いてDockerfileを追加。

DockerfileはDockerイメージを作成するためのテキストファイル。

Pythonのパッケージ管理にはPoetryを利用している。

# python3.9のイメージをダウンロード
FROM python:3.9-buster

# 環境変数
ENV PYTHONUNBUFFERED=1

# コマンドを実行する作業ディレクトリ
WORKDIR /src

# Dockerイメージのビルド時にシェルコマンドを実行する
# pipを使ってpoetryをインストール
RUN pip install poetry

# ホスト(ローカル)のファイルやディレクトリをDockerイメージにコピー
# poetryの定義ファイルをコピー (存在する場合)
COPY pyproject.toml* poetry.lock* ./

# venv のファイルをプロジェクトディレクトリの下に置く
RUN poetry config virtualenvs.in-project true
# poetryでライブラリをインストール (pyproject.tomlが既にある場合)
RUN if [ -f pyproject.toml ]; then poetry install --no-root; fi

# コンテナが起動した際に実行されるコマンド
# uvicornのサーバーを立ち上げるコマンド
ENTRYPOINT ["poetry", "run", "uvicorn", "api.main:app", "--host", "0.0.0.0", "--reload"]

二つのファイルを追加したらプロジェクトディレクトリで以下のコマンドを実行してDockerイメージを作成する。

docker-compose build

doker descktopを開いてImagesメニューに追加されていれば作成完了。

FastAPIのインストール

以下の記事の手順に従って実行。

https://zenn.dev/sh0nk/books/537bb028709ab9/viewer/5d287c

コマンドは「\」を入れてエンターを押すと続けて入力していくことができます。

VSCodeから開発コンテナへの接続

FastAPIのインストールが完了したらVSCodeで開発ができるようにしていきます。

拡張機能のDev Containersが必要ですのでインストールしておきましょう。

https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers

doker descktopを開いて今回利用するコンテナが起動しているか確認します。

VSCodeを開いてリモートエクスプローラーを開きます。

右上の項目が「リモート」となっているケースがあるのでその場合は「開発コンテナー」に切り替えます。

次に「新しいウィンドウでアタッチ」をクリックするとコンテナ内に接続できます。

次に「フォルダーを開く」を押します。

作業ディレクトリのパスを入力してOKを押します。

これで開発をすることができます。

あとは必要な拡張機能を追加していってもらえればOKです。

とりあえずPythonの拡張機能は必須ですね。
https://marketplace.visualstudio.com/items?itemName=ms-python.python

お疲れ様でした!

Discussion