山羊の午後

研究関係の備忘録。

バックエンドのデプロイ準備:Dockerファイルをつくる

生成AIを使ってゼロからWebサービスをつくる - 山羊の午後

6日目。今日はバックエンドのデプロイ~!と取り掛かりましたが、バックエンドのデプロイ方法をChatGPTに聞いた結果、Dockerを使おう!という結論になり、今日の作業はDockerの勉強とDockerファイルの作成になりました。

Docker、触ったことはあるし、使えるのですが、
アプリのデプロイに向けていちからDockerファイルを書いたことはない、というレベル感です。

今回、Pythonの環境構築をuvでやり、FastAPIのアプリを作成しました。
この条件でDockerファイルを作るぞ~と調べ始めたのですが、
uvの環境をdockerに作るのがやや手間、というか知見が少ない。。。
uv on Docker をやっている
手順通りにやればできるものの、これは初心者にはめんどうだな、という所感。

そこでこうしました。
uvでつくった仮想環境で pip freezeでrequirements.txtをつくり、pipインストールでpython環境が構築できるようにする。

cd backend # uv project フォルダ
source .venv/bin/activate
pip freeze > requirements.txt

これなら初心者にも安心、な感じです。
続いてDockerファイルを作ります。これも状況を伝えてChatGPTに書かせます。

# ベースイメージ
FROM python:3.12-slim

# 作業ディレクトリの設定
WORKDIR /app

# 必要ファイルのコピー
COPY requirements.txt .

# 依存関係のインストール
RUN pip install --no-cache-dir -r requirements.txt

# アプリ全体のコードをコピー
COPY . .

# ポートの公開
EXPOSE 8000

# 起動コマンド
CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8000"]

書いてもらったものを読みながら、それぞれ開設してもらう。
そういえばなんで起動はuvicornなんだ?とuvicornとFastAPIの関係性について教えてもらったり。
アプリケーションというのは何層にも処理が重ねられて動いているんだなあ、と感慨深く学びました。
そりゃ、いろいろエラー出るわ。。。と思いながらDockerファイルの書き方を学ぶ。

出来上がったものがローカルで動くことを確認する。

docker build -t app .
docker run -p 8000:8000 app

できましたー。
今日はここまで。書くとあっさりしていますが、なかなか大変でした。