はじめに
「自分のPCでは動くのに本番サーバーでは動かない」という問題は機械学習エンジニアがよく直面するトラブルです。Dockerを使うと環境を丸ごとコンテナ化できて、どの環境でも同じように動かせます。MLOpsの観点からもDockerは必須の知識です。
Dockerとは
Dockerはアプリケーションとその実行環境をコンテナという単位でパッケージ化する技術です。コンテナはOS・Python・ライブラリをすべて含んだ「動く箱」なので、環境差異による問題が起きません。
機械学習プロジェクトのDockerfile例
# Dockerfile
FROM python:3.11-slim
# 作業ディレクトリの設定
WORKDIR /app
# 依存関係のインストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# アプリケーションのコピー
COPY . .
# デフォルトコマンド
CMD ["python", "train.py"]
# requirements.txt
numpy==1.26.4
pandas==2.2.0
scikit-learn==1.4.0
lightgbm==4.3.0
mlflow==2.11.0
fastapi==0.110.0
uvicorn==0.29.0
Dockerイメージのビルドと実行
# イメージのビルド
docker build -t ml-app:v1 .
# コンテナを起動(学習実行)
docker run --rm ml-app:v1
# データをマウントして実行
docker run --rm \
-v $(pwd)/data:/app/data \
-v $(pwd)/models:/app/models \
ml-app:v1
# コンテナ内でインタラクティブに操作
docker run -it --rm ml-app:v1 /bin/bash
FastAPIでモデルをAPI化する
# app.py
from fastapi import FastAPI
from pydantic import BaseModel
import joblib
import numpy as np
app = FastAPI()
model = joblib.load('model.pkl')
class Features(BaseModel):
feature1: float
feature2: float
feature3: float
@app.post('/predict')
def predict(features: Features):
X = np.array([[features.feature1, features.feature2, features.feature3]])
prediction = model.predict(X)[0]
probability = model.predict_proba(X)[0].max()
return {'prediction': int(prediction), 'probability': float(probability)}
# APIサーバーをDockerで起動
docker run -d \
-p 8000:8000 \
-v $(pwd)/models:/app/models \
ml-app:v1 \
uvicorn app:app --host 0.0.0.0 --port 8000
# APIのテスト
curl -X POST 'http://localhost:8000/predict' \
-H 'Content-Type: application/json' \
-d '{"feature1": 1.5, "feature2": 2.3, "feature3": 0.8}'
docker-compose.ymlで複数サービスを管理
# docker-compose.yml
version: '3.8'
services:
ml-api:
build: .
ports:
- '8000:8000'
volumes:
- ./models:/app/models
command: uvicorn app:app --host 0.0.0.0 --port 8000
mlflow:
image: ghcr.io/mlflow/mlflow:latest
ports:
- '5000:5000'
command: mlflow server --host 0.0.0.0
まとめ
DockerはMLエンジニアにとって必須ツールです。Dockerfile→イメージビルド→コンテナ起動の流れを覚えて、モデルをFastAPIでAPI化してDockerで動かすことができれば、MLOpsの基礎として十分なスキルです。転職ポートフォリオにGitHubで公開すると実力証明になります。
💼 ITエンジニア転職特化
自分らしく働けるエンジニア転職を目指すなら【strategy career】
年収1000万・残業月30時間以下・リモート可の求人多数
※アフィリエイト広告を含みます
![]()
※本記事にはアフィリエイトリンクが含まれます。


コメント