In this article
DockerでLLMモデルをローカル実行する方法
開発者が大規模言語モデル(LLM)に触れる機会は、多くの場合、OpenAIのGPT-4o、GoogleのGemini 2.5 Pro、AnthropicのClaude Sonnet 4といった基盤モデルに関連する文脈です。しかし、生成AIのユースケースの中には、開発用マシンだけで完結できるものもあります。
このクイックスタートガイドでは、機械学習の専門用語やPythonツールなどの知識に深入りせず、ソフトウェア開発者にとって難しそうに思える専門知識も必要とせずに、ノートパソコン上でモデルを実行する方法(GPUがあれば推論も可能)を手早く紹介します。
LLMモデルを自分のマシンでローカル実行する理由
モデルのコスト、プライバシーやセキュリティへの懸念、社内ポリシーや外部規制などの理由から、ユースケースや要件によっては、自社環境(オンプレミスのデータセンター)や自分のPC・ノートパソコン上でモデルを実行する必要があります。
Dockerでモデルを実行する方法
Dockerは、アプリケーションのコンテナ化に伴うさまざまな課題を抽象化し、異なるプラットフォーム上でシームレスに実行できるようにする技術として知られています。Dockerは今、LLMでも同じことを実現しています。
このチュートリアルの要件は次のとおりです。
Docker EngineまたはDocker Desktopのバージョン4.41以降が必要です。チュートリアルを正常に進めるため、ローカル環境のインストールを最新の状態に更新してください。
詳しくはDocker Model Runnerのドキュメントをご確認ください。
ステップ1:Docker Model Runnerを有効にする
Dockerを最新バージョンに更新していれば、Docker Model Runnerは有効になっているはずです。ただし、VercelのAI SDKのようなプログラムコードからモデルに接続できるよう、host-side TCP supportも有効にする必要があります。有効にしない場合、docker CLI経由でしかModel Runnerを操作できません。
Docker DesktopのSettingsを開き、Beta featuresに移動して、次の2つのオプションを有効にします。
「Docker Model Runnerを有効にする」
「ホスト側のTCPサポートを有効にする」

ステップ2:LLMモデルを取得する
次に、Docker Desktopのダッシュボードを開き、左側のサイドバーメニューからModelsを選択すると、利用可能なモデルをすべて確認できます。

モデルはDocker Hubでも見つけられます。
今回は、ディスク容量が300MB未満のsmollm2モデルを使います。より高い性能を求める場合は、gemma3のような3B~4Bのモデルファミリー、次の段階となる7B~8Bパラメーターのモデル、またはMicrosoftの14Bパラメーターを持つphi4.を試すのがおすすめです。
モデルの性能は、ローカルのCPUやGPU、およびそれらのリソースを活用するために利用できる推論エンジンに大きく左右されます。Dockerを使えば手軽にローカルで試せますが、初期設定のままでは最高のパフォーマンスを得られるよう調整されていない可能性があります。
実行するローカルモデルが決まったら、ターミナルで次のコマンドを実行するだけです。
docker model run ai/smollm2モデルがまだ環境にインストールされていない場合、Dockerがレジストリからモデルをプルして実行します。

これで、CLIの対話型セッションからモデルを操作できます。
ステップ3:AI SDKからローカルLLMを使う
Vercel AI SDKは通常、OpenAIやAnthropicなどのホスト型モデルエンドポイントと組み合わせて使います。しかし、Docker Model Runner経由で実行するモデルなど、セルフホスト型モデルにも簡単に対応させることができます。
一般的に、LLMへのプロンプト送信では、SDKのcreateStreamableUI()やstreamText()のプリミティブを使ってカスタムフェッチャーを作成します。以下は、OpenAIのエンドポイントとして設定する方法を示したTypeScriptのコード例です。
まず、AI SDKがインストールされていることを確認してください。
npm install ai環境変数を設定します。
OPENAI_API_KEY=docker
OPENAI_BASE_URL=http://localhost:12434/engines/llama.cpp/v1OPENAI_API_KEYには、一般的なプレースホルダーではなく、実際にdockerを設定する点に注意してください。
次に、以下のようにAPIルートを定義します。
import { OpenAIStream, StreamingTextResponse } from 'ai';
import OpenAI from 'openai';
// or 'nodejs' depending on your environment
export const runtime = 'edge';
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY!,
baseURL: process.env.OPENAI_BASE_URL!,
});
export async function POST(req: Request) {
const { messages } = await req.json();
const response = await openai.chat.completions.create({
model: 'ai/smollm2',
messages,
stream: true,
});
const stream = OpenAIStream(response);
return new StreamingTextResponse(stream);
}
同様に、公式のOpenAI SDKを使い、OPENAI_BASE_URLとOPENAI_API_KEYに、Docker Model Runnerのローカル設定値を指定することもできます。
Docker、AI、セキュリティについてさらに詳しく
ローカルでLLMを実行できるようになったら、LLMが安全なコードを生成するための対策や、プロンプトインジェクション攻撃への理解を深める方法、MCPの活用についても関心があるかもしれません。
これらのトピックについてさらに知りたい方は、次の記事をご覧ください。
このローカルLLMのチュートリアルですでにDockerを使っているので、DockerでMCPサーバーを実行する方法もぜひご覧ください。
見えないPDFテキストを使ったプロンプトインジェクション攻撃で、LLMベースのロジックをだます方法を解説します。
MCPを初めて使う方は、MCPのアーキテクチャを視覚的に理解するガイドをご覧ください。
MCPについては、開発者向けの人気MCPサーバーもご確認ください。