Docker Model Runner チートシート: コマンドと例
Docker Model Runner コマンドのクイックリファレンス
Docker Model Runner (DMR) は、2025年4月に導入されたDocker公式のAIモデルをローカルで実行するためのソリューションです。このチートシートは、すべての必須コマンド、設定、ベストプラクティスのクイックリファレンスを提供しています。

インストール
Docker Desktop
GUI経由でDocker Model Runnerを有効にします:
- Docker Desktopを開きます
- 設定 → AI タブに移動します
- Docker Model Runnerを有効にする をクリックします
- Docker Desktopを再起動します
/home/rg/prj/hugo-pers/content/post/2025/10/docker-model-runner-cheatsheet/docker-model-runner_w678.jpg

Docker Engine (Linux)
プラグインパッケージをインストールします:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker-model-plugin
# Fedora/RHEL
sudo dnf install docker-model-plugin
# Arch Linux
sudo pacman -S docker-model-plugin
インストールを確認します:
docker model --help
Docker における NVIDIA RTX のサポート
LLMをGPUで実行するためには、nvidia-container-toolkitをインストールします:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
その後、--gpus all でコンテナを実行できます:
docker run --rm --gpus all <image> <command>
コンテナがGPUを認識しているか確認します:
docker run --rm --gpus all nvidia/cuda:12.2.2-base-ubi8 nvidia-smi
Docker Model Runner における NVIDIA サポートの追加
Docker Model Runnerでは、GPU設定を明示的に指定する必要があります。標準の docker run コマンドとは異なり、docker model run は --gpus や -e フラグをサポートしていません。代わりに以下の手順が必要です:
- DockerデーモンをデフォルトでNVIDIAランタイムを使用するように設定する
まず、nvidia-container-runtimeがインストールされている場所を確認します:
which nvidia-container-runtime
これは通常 /usr/bin/nvidia-container-runtime を出力します。このパスを以下の設定に使用します。
/etc/docker/daemon.json を作成または更新します:
sudo tee /etc/docker/daemon.json > /dev/null << 'EOF'
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
EOF
注意: which nvidia-container-runtime が異なるパスを返す場合、JSON設定内の "path" の値をそれに合わせて更新してください。
Dockerを再起動します:
sudo systemctl restart docker
設定を確認します:
docker info | grep -i runtime
出力には Default Runtime: nvidia が表示されるはずです。
- GPUサポート付きでDocker Model Runnerを再インストールする
Docker Model Runnerは、明示的なGPUサポート付きでインストールまたは再インストールする必要があります:
# 現在のランナーを停止
docker model stop-runner
# CUDA GPUサポート付きで再インストール
docker model reinstall-runner --gpu cuda
これにより、CPU専用バージョンではなくCUDA対応バージョン (docker/model-runner:latest-cuda) が引き込まれます。
- GPUへのアクセスを確認する
Docker Model RunnerコンテナがGPUにアクセスできるか確認します:
docker exec docker-model-runner nvidia-smi
- GPUを使用してモデルをテストする
モデルを実行し、ログを確認してGPU使用状況を確認します:
docker model run ai/qwen3:14B-Q6_K "who are you?"
ログでGPU確認:
docker model logs | grep -i cuda
以下のようなメッセージが表示されるはずです:
using device CUDA0 (NVIDIA GeForce RTX 4080)offloaded 41/41 layers to GPUCUDA0 model buffer size = 10946.13 MiB
注意: すでにGPUサポートなしでDocker Model Runnerをインストールした場合、--gpu cuda フラグで再インストールする必要があります。Dockerデーモンの設定だけでは十分ではなく、ランナー自体がCUDA対応バージョンである必要があります。
利用可能なGPUバックエンド:
cuda- NVIDIA CUDA(最も一般的)rocm- AMD ROCmmusa- Moore Threads MUSAcann- Huawei CANNauto- 自動検出(デフォルト)none- CPU専用
コアコマンド
モデルのプル
Docker Hubから事前パッケージ化されたモデルをプルします:
# 基本的なプル
docker model pull ai/llama2
# 特定バージョンのプル
docker model pull ai/llama2:7b-q4
# カスタムレジストリからプル
docker model pull myregistry.com/models/mistral:latest
# ネームスペース内の利用可能なモデルを一覧表示
docker search ai/
モデルの実行
モデルを自動APIサーバー付きで起動します:
# 基本的な実行(インタラクティブ)
docker model run ai/llama2 "What is Docker?"
# サービスとして実行(バックグラウンド)
docker model run -d
CLI経由でモデルを実行する際には、多くのオプションがありません:
docker model run --help
Usage: docker model run MODEL [PROMPT]
モデルを実行し、提示されたプロンプトまたはチャットモードでインタラクションします
オプション:
--color string 色付き出力を使用 (auto|yes|no) (デフォルト "auto")
--debug デバッグログを有効にする
-d, --detach モデルをバックグラウンドでロードし、インタラクションなし
--ignore-runtime-memory-check 推定ランタイムメモリがシステムリソースを超える場合でもプルをブロックしない
モデルの一覧表示
ダウンロード済みおよび実行中のモデルを表示します:
# すべてのダウンロード済みモデルを一覧表示
docker model ls
# 実行中のモデルを一覧表示
docker model ps
# 詳細情報を含めて一覧表示
docker model ls --json
# 詳細情報を含めて一覧表示
docker model ls --openai
# 通常ハッシュコードのみを返す
docker model ls -q
モデルの削除
ローカルストレージからモデルを削除します:
# 特定のモデルを削除
docker model rm ai/llama2
# 強制削除(実行中でも)
docker model rm -f ai/llama2
# 未使用モデルを削除
docker model prune
# すべてのモデルを削除
docker model rm $(docker model ls -q)
モデルコンテキストサイズの設定
CLI経由で特定のリクエストにコンテキストサイズを指定することはできません。
基本的に、モデルのコンテキストサイズを制御するには以下の3つの方法があります:
-
自分でパッケージ化し、指定されたハードコードされたコンテキストサイズを設定します(次のセクションで詳しく説明します。)
-
docker model runnerの設定コマンドで--context-sizeパラメータを使用します:
docker model configure --context-size=10000 ai/gemma3-qat:4B
その後、curlで呼び出すことができますが、docker model run... は設定を無視します。
docker-compose.yamlファイル内で設定できますが、docker-model-runnerイメージを使用することはできません。なぜなら、ハードコードされたコンテキストサイズ4096がモデルに渡されるからです。
...
models:
llm_model:
model: ai/gemma3-qat:4B
context_size: 10240
...
詳しくは以下の投稿をご覧ください: DMRにおけるコンテキストサイズの指定
カスタムモデルのパッケージング
GGUFからOCIアーティファクトの作成
独自のGGUFモデルをパッケージ化します:
# 基本的なパッケージ化
docker model package --gguf /path/to/model.gguf myorg/mymodel:latest
# メタデータ付きでパッケージ化
docker model package \
--gguf /path/to/model.gguf \
--label "description=カスタムLlamaモデル" \
--label "version=1.0" \
myorg/mymodel:v1.0
# 1つのコマンドでパッケージ化してプッシュ
docker model package --gguf /path/to/model.gguf --push myorg/mymodel:latest
# カスタムコンテキストサイズでパッケージ化
docker model package \
--gguf /path/to/model.gguf \
--context 8192 \
myorg/mymodel:latest
モデルの公開
レジストリにモデルをプッシュします:
# Docker Hubにログイン
docker login
# Docker Hubにプッシュ
docker model push myorg/mymodel:latest
# プライベートレジストリにプッシュ
docker login myregistry.com
docker model push myregistry.com/models/mymodel:latest
# タグを付けてプッシュ
docker model tag mymodel:latest myorg/mymodel:v1.0
docker model push myorg/mymodel:v1.0
APIの使用
OpenAI互換エンドポイント
Docker Model Runnerは自動的にOpenAI互換のAPIを公開します:
# API付きでモデルを起動
docker model run -d -p 8080:8080 --name llm ai/llama2
# チャット補完
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"messages": [{"role": "user", "content": "Hello!"}]
}'
# テキスト生成
curl http://localhost:8080/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"prompt": "Once upon a time",
"max_tokens": 100
}'
# ストリーミング応答
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"messages": [{"role": "user", "content": "Tell me a story"}],
"stream": true
}'
# 利用可能なモデルをAPI経由で一覧表示
curl http://localhost:8080/v1/models
# モデル情報
curl http://localhost:8080/v1/models/llama2
Docker Compose設定
基本的なComposeファイル
version: '3.8'
services:
llm:
image: docker-model-runner
model: ai/llama2:7b-q4
ports:
- "8080:8080"
environment:
- MODEL_TEMPERATURE=0.7
volumes:
- docker-model-runner-models:/models
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
docker-model-runner-models:
external: true
マルチモデル設定
version: '3.8'
services:
llama:
image: docker-model-runner
model: ai/llama2
ports:
- "8080:8080"
mistral:
image: docker-model-runner
model: ai/mistral
ports:
- "8081:8080"
embedding:
image: docker-model-runner
model: ai/nomic-embed-text
ports:
- "8082:8080"
より高度なDocker Compose設定とコマンドについては、Docker Composeチートシート をご覧ください。ネットワーキング、ボリューム、オーケストレーションパターンについても説明しています。
環境変数
モデルの動作を環境変数で設定します:
# 温度 (0.0-1.0)
MODEL_TEMPERATURE=0.7
# Top-pサンプリング
MODEL_TOP_P=0.9
# Top-kサンプリング
MODEL_TOP_K=40
# 最大トークン数
MODEL_MAX_TOKENS=2048
# GPUレイヤー数
MODEL_GPU_LAYERS=35
# バッチサイズ
MODEL_BATCH_SIZE=512
# スレッド数(CPU)
MODEL_THREADS=8
# 詳細なログを有効にする
MODEL_VERBOSE=true
# 認証用APIキー
MODEL_API_KEY=your-secret-key
環境変数付きで実行します:
docker model run \
-e MODEL_TEMPERATURE=0.8 \
-e MODEL_API_KEY=secret123 \
ai/llama2
GPU設定
自動GPU検出
DMRは自動的に利用可能なGPUを検出・使用します:
# すべてのGPUを使用
docker model run --gpus all ai/llama2
# 特定のGPUを使用
docker model run --gpus 0 ai/llama2
# 複数の特定のGPUを使用
docker model run --gpus 0,1,2 ai/llama2
# メモリ制限付きでGPUを使用
docker model run --gpus all --memory 16g ai/llama2
CPU専用モード
GPUが利用可能でもCPUでの推論を強制します:
docker model run --no-gpu ai/llama2
マルチGPUテンソル並列
大規模モデルを複数のGPUに分散して実行します:
docker model run \
--gpus all \
--tensor-parallel 2 \
ai/llama2-70b
見てみる・デバッグ
モデルの詳細を表示
# モデル構成を確認
docker model inspect ai/llama2
# モデルレイヤーを表示
docker model history ai/llama2
# モデルサイズとメタデータを確認
docker model inspect --format='{{.Size}}' ai/llama2
ログとモニタリング
# モデルログを表示
docker model logs llm
# 実時間でログをフォロー
docker model logs -f llm
# 最後の100行を表示
docker model logs --tail 100 llm
# タイムスタンプ付きでログを表示
docker model logs -t llm
パフォーマンス統計
# リソース使用状況
docker model stats
# 特定モデルの統計
docker model stats llm
# JSON形式で統計を表示
docker model stats --format json
ネットワーキング
APIの公開
# デフォルトポート(8080)
docker model run -p 8080:8080 ai/llama2
# カスタムポート
docker model run -p 3000:8080 ai/llama2
# 特定インターフェースにバインド
docker model run -p 127.0.0.1:8080:8080 ai/llama2
# 複数ポート
docker model run -p 8080:8080 -p 9090:9090 ai/llama2
ネットワーク設定
# カスタムネットワークを作成
docker network create llm-network
# カスタムネットワーク上でモデルを実行
docker model run --network llm-network --name llm ai/llama2
# 既存ネットワークに接続
docker model run --network host ai/llama2
セキュリティ
アクセス制御
# APIキー認証付きで実行
docker model run \
-e MODEL_API_KEY=my-secret-key \
ai/llama2
# 認証付きで使用
curl http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer my-secret-key" \
-H "Content-Type: application/json" \
-d '{"model": "llama2", "messages": [...]}'
レジストリ認証
# プライベートレジストリにログイン
docker login myregistry.com -u username -p password
# プライベートレジストリからプル
docker model pull myregistry.com/private/model:latest
# クレデンシャルヘルパーを使用
docker login --password-stdin < token.txt
ベストプラクティス
モデル選択
# より高速な推論のためにクアンタイズモデルを使用
docker model pull ai/llama2:7b-q4 # 4ビットクアンタイズ
docker model pull ai/llama2:7b-q5 # 5ビットクアンタイズ
docker model pull ai/llama2:7b-q8 # 8ビットクアンタイズ
# モデルバリアントを確認
docker search ai/llama2
リソース管理
# メモリ制限を設定
docker model run --memory 8g --memory-swap 16g ai/llama2
# CPU制限を設定
docker model run --cpus 4 ai/llama2
# GPUメモリを制限
docker model run --gpus all --gpu-memory 8g ai/llama2
ヘルスチェック
# ヘルスチェック付きで実行
docker model run \
--health-cmd "curl -f http://localhost:8080/health || exit 1" \
--health-interval 30s \
--health-timeout 10s \
--health-retries 3 \
ai/llama2
本番環境でのオーケストレーション
Kubernetesでの本番環境デプロイでは、Docker Model Runnerコンテナは標準のKubernetesマニフェストを使用してオーケストレーションできます。リソース制限、オートスケーリング、ロードバランシングを定義します。詳細なKubernetesコマンドリファレンスとデプロイパターンについては、Kubernetesチートシート をご覧ください。
# 例: Kubernetesクラスターにデプロイ
kubectl apply -f llm-deployment.yaml
# デプロイをスケール
kubectl scale deployment llm --replicas=3
# サービスとして公開
kubectl expose deployment llm --type=LoadBalancer --port=8080
トラブルシューティング
一般的な問題
モデルが起動しない:
# 利用可能なディスクスペースを確認
df -h
# 詳細なエラーログを表示
docker model logs --tail 50 llm
# GPUの利用可能性を確認
nvidia-smi # NVIDIA GPUの場合
メモリ不足エラー:
# より小さなクアンタイズモデルを使用
docker model pull ai/llama2:7b-q4
# コンテキストサイズを減らす
docker model run -e MODEL_CONTEXT=2048 ai/llama2
# バッチサイズを減らす
docker model run -e MODEL_BATCH_SIZE=256 ai/llama端
推論が遅い:
# GPU使用状況を確認
docker model stats llm
# GPUが使用されているか確認
docker model logs llm | grep -i gpu
# GPUレイヤー数を増やす
docker model run -e MODEL_GPU_LAYERS=40 ai/llama2
ディアグノスティックコマンド
# システム情報
docker model system info
# ディスク使用状況
docker model system df
# 未使用リソースをクリーンアップ
docker model system prune
# 完全なクリーンアップ(すべてのモデルを削除)
docker model system prune -a
インテグレーション例
Pythonインテグレーション
import openai
# Docker Model Runner用にクライアントを設定
client = openai.OpenAI(
base_url="http://localhost:8080/v1",
api_key="not-needed" # DMRはデフォルトでキー不要
)
# チャット補完
response = client.chat.completions.create(
model="llama2",
messages=[
{"role": "user", "content": "Hello!"}
]
)
print(response.choices[0].message.content)
# ストリーミング
stream = client.chat.completions.create(
model="llama2",
messages=[{"role": "user", "content": "Tell me a story"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
Bashスクリプト
#!/bin/bash
# 実行中でなければモデルを起動
if ! docker model ps | grep -q "llm"; then
docker model run -d --name llm -p 8080:8080 ai/llama2
echo "モデルが起動するのを待っています..."
sleep 10
fi
# API呼び出し
curl -s http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"messages": [{"role": "user", "content": "'"$1"'"}]
}' | jq -r '.choices[0].message.content'
Node.jsインテグレーション
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'http://localhost:8080/v1',
apiKey: 'not-needed'
});
async function chat(message) {
const completion = await client.chat.completions.create({
model: 'llama2',
messages: [{ role: 'user', content: message }]
});
return completion.choices[0].message.content;
}
// 使い方
const response = await chat('Docker Model Runnerとは何ですか?');
console.log(response);
有用なリンク
公式ドキュメント
- Docker Model Runner公式ページ
- Docker Model Runnerドキュメント
- Docker Model Runnerの開始ガイド
- Docker Model Runnerの発表ブログ