統計ロードマップ
2026-04-30·実装·⏱ 約 5

Docker 入門 ─ ML 環境の再現性を担保する

「自分の PC では動く問題」を解決する Docker。ML プロジェクトの Dockerfile・GPU 対応・docker-compose・Multi-Stage Build までを実用視点で。

Docker は『自分の PC では動く問題』の決定的解決策。同じ環境をチームメンバーや本番サーバで再現でき、MLOps の必須ツールです。

なぜ Docker?

  • 環境の再現性: Python ・ ライブラリ ・ OS パッケージのバージョン固定
  • ポータビリティ: ローカル → クラウド → 別チーム どこでも動く
  • 隔離: ホストの環境を汚さない
  • スケール: Kubernetes ・ Cloud Run ・ ECS で自動スケール

Hello Docker

Dockerfile
FROM python:3.12-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "main.py"]
ビルドと実行
docker build -t my-ml-app .
docker run -p 8000:8000 my-ml-app

ML プロジェクトの実用 Dockerfile

scikit-learn + FastAPI
FROM python:3.12-slim

# OS パッケージ
RUN apt-get update && apt-get install -y \
    build-essential \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

# 依存だけ先にインストール(レイヤキャッシュ最適化)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# モデルファイル + コード
COPY model.pkl .
COPY src/ ./src/

EXPOSE 8000
CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000"]
💡 レイヤキャッシュ

requirements.txt → COPY → RUN install を先にすることで、コード変更時にライブラリ再インストールを回避(ビルド時間 30 倍速)。

GPU 対応

PyTorch GPU の Dockerfile
FROM nvidia/cuda:12.1.0-runtime-ubuntu22.04

RUN apt-get update && apt-get install -y python3.12 python3-pip

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .
CMD ["python", "train.py"]
GPU 付きで起動
docker run --gpus all -v $(pwd)/data:/app/data my-ml-app

docker-compose で複数サービス

docker-compose.yml
services:
  api:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://postgres:pass@db/mldb
    depends_on:
      - db

  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mldb
    volumes:
      - pgdata:/var/lib/postgresql/data

  redis:
    image: redis:7

volumes:
  pgdata:

Multi-Stage Build(本番向け)

サイズを 1/10 に
# Stage 1: build
FROM python:3.12 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt

# Stage 2: runtime(軽量)
FROM python:3.12-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
CMD ["python", "main.py"]

.dockerignore は必須

.dockerignore
__pycache__
*.pyc
.git
.venv
node_modules
data/
*.csv
*.parquet
.env

Tips

  • alpine vs slim: alpine は最軽量だが ML 系で不具合多い → slim 推奨
  • python:3.12-slim は約 130 MB
  • docker buildx: Mac ・ Windows でも Linux イメージビルド
  • docker scout: 脆弱性スキャン
  • pre-built ML イメージ: PyTorch/TensorFlow 公式を流用

学習リソース

  • [FastAPI 入門](/blog/fastapi-introduction)
  • [GitHub Actions で ML CI](/blog/github-actions-ml-ci)
  • [MLOps 基礎](/blog/mlops-basics)
  • [Vercel デプロイ](/blog/vercel-deployment-for-ai)
Related Articles

関連記事