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 必須命令の理解確認
力試ししたい方は クイズ形式の演習(任意) もあります。読むだけでも十分です。