採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

L15 ch01 — Dockerfile

テクノロジ系 / L15 deploy — デプロイ

L15 ch01 — Dockerfile

FastAPI アプリをコンテナ化する

ゴール

  • Dockerfile の基本命令を理解
  • イメージビルド + コンテナ起動
  • マルチステージビルドで容量削減

最小 Dockerfile

FROM python:3.13-slim

WORKDIR /app

COPY pyproject.toml uv.lock ./
RUN pip install uv && uv sync --frozen --no-dev

COPY . .

EXPOSE 8000

CMD ["uv", "run", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

ビルド & 起動

docker build -t my-fastapi .
docker run -p 8000:8000 my-fastapi
curl http://localhost:8000/

主要命令

命令意味
FROMベースイメージ
WORKDIRコンテナ内の作業ディレクトリ
COPYホスト → コンテナへファイル転送
RUNビルド時に実行 (パッケージインストール)
EXPOSE公開ポート (ドキュメント目的)
CMDコンテナ起動時のデフォルトコマンド

.dockerignore

# .dockerignore
.git
.venv
__pycache__
*.pyc
.env

→ ビルドコンテキストから除外。ビルド高速化 + 機密漏洩防止

マルチステージビルド

# build stage
FROM python:3.13 AS builder
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN pip install uv && uv sync --frozen --no-dev

# runtime stage
FROM python:3.13-slim
WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
COPY . .
CMD ["/app/.venv/bin/uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

→ 最終イメージから ビルドツールを除外

環境変数注入

docker run -p 8000:8000 \
  -e GEMINI_API_KEY=... \
  -e DATABASE_URL=... \
  my-fastapi

→ 機密はイメージに焼き込まず実行時に注入

drill

drill/ — Dockerfile 必須命令の理解確認

力試ししたい方は クイズ形式の演習(任意) もあります。読むだけでも十分です。