Docker Model RunnerとOpen WebUIでローカルで画像を生成する

投稿日: 5月 5日, 2026年

誰もが経験あるでしょう。プロジェクトのために数枚の画像を生成する必要があり、AI画像サービスを起動すると、突然プロンプトがどうなるのか、残っているクレジットはいくつあるのか、なぜ「安全なコンテンツ」フィルターがビジネススーツを着たドラゴンのごく合理的なリクエストを却下したのか疑問に思うでしょう。もしそれらをすべて飛ばして、自分のマシンで全部動かせて、洗練されたチャットUIを搭載したらどうでしょう?

それこそが、Docker Model Runnerが今や可能にしていることです。いくつかのコマンドで画像生成モデルを抽出し、 Open WebUIに接続して、チャットインターフェースから完全にローカルで完全にプライベートで、完全に自分のものの画像生成を始められます。

作ろう。自分専用のプライベートDALL-Eで、クラウドのサブスクリプションは不要です。

必要なもの

  • Docker Desktop (macOS)または Docker Engine (Linux)
  • ~ 小型モデルには空きRAM8GBあり(多いほど良い)
  • GPU:オプションですが強く推奨します。NVIDIA (CUDA)、Apple Silicon (MPS)、またはCPUのフォールバック

Dockerモデル版をエラーなく実行できれば問題ありません。

Docker Model RunnerがOpen WebUIで動作する仕組み

本題に入る前に、まずは大まかな状況を説明します。

Open WebUIで画像を生成する 図 1

Docker Model Runnerは制御プレーンとして機能します。モデルをダウンロードし、推論バックエンドのライフサイクルを管理し、OpenAI互換100%のAPIを公開します。これにはOpenUIがすでに通信方法を知っているPOST /v1/images/generationsエンドポイントも含まれています。

ステップ 1:画像生成モデルを抽出する

Docker Model Runnerは、他のOCI成果物と同様に、Docker Hubを通じて画像生成モデルを配布するために、 DDUF (Diffusers Unified Format)と呼ばれるコンパクトなパッケージ形式を使用します。

まずはモデルを引っ張ってみて:

docker model pull stable-diffusion

準備が整っていることを確認できます:

docker model inspect stable-diffusion
{
    "id": "sha256:5f60862074a4c585126288d08555e5ad9ef65044bf490ff3a64855fc84d06823",
    "tags": [
        "docker.io/ai/stable-diffusion:latest"
    ],
    "created": 1768470632,
    "config": {
        "format": "diffusers",
        "architecture": "diffusers",
        "size": "6.94GB",
        "diffusers": {
            "dduf_file": "stable-diffusion-xl-base-1.0-FP16.dduf",
            "layout": "dduf"
        }
    }
}

ボンネットの下で何が起きているのか?モデルはDDUFファイルとしてローカルに保存されます。これは、拡散モデルのすべてのコンポーネント(テキストエンコーダー、VAE、UNet/DiT、スケジューラ設定)を1つのポータブルアーティファクトにまとめた単一のファイル形式です。Docker Model Runnerは実行時にアンパックする方法を知っています。

ステップ 2:Open WebUIを起動

これはマジックトリックだ。Docker Model Runnerには、Open WebUIをローカルの推論エンドポイントにどのように配線するかを正確に把握した起動コマンドが内蔵されています:

docker model launch openwebui

それだけです。舞台裏では以下の通りです:

docker run --rm \
  -p 3000:8080 \
  -e OPENAI_API_BASE=http://model-runner.docker.internal/engines/v1 \
  -e OPENAI_BASE_URL=http://model-runner.docker.internal/engines/v1 \
  -e OPENAI_API_KEY=sk-docker-model-runner \
  ghcr.io/open-webui/open-webui:latest

model-runner.docker.internal ホスト名は、Docker Desktop コンテナがホスト上で動作する Model Runner にアクセスするために使う特別な DNS エントリであり、ポートフォワーディングの手間は不要です。Docker CEを使うと、model-runner.docker.internalではなくdocker/model-runnerのコンテナアドレスが表示されます。

ブラウザを http://localhost:3000で開き、ローカルアカウントを作成します(オフラインのまま)。そうするとチャットインターフェースに到達します。

ヒント: バックグラウンドで動かしたいですか?足し算 –切り離し:

docker model launch openwebui --detach

Docker Composeの方が好みですか?完全なセットアップはこちらをご覧ください: https://docs.docker.com/ai/model-runner/openwebui-integration/

ステップ 3:画像生成のためのOpen WebUI設定

Open WebUIはすでにテキストチャットにDocker Model Runnerを使っています(OPENAI_API_BASE env varを読み取っています)。画像生成には、設定UIの 30秒間の作業として画像のエンドポイントを指す必要があります。

  1. http://localhost に来ました :3000/admin/settings/images
  2. 画像生成を有効にする
  3. フィールドを埋める:
  4. 「保存」をクリックします。

フィールド

価値

モデル

安定拡散

APIベースURL

http://model-runner.docker.internal/engines/diffusers/v1

APIキー

好きなようにして

なぜダミーAPIキーを使うのですか? Docker Model Runnerは認証を必要とせず、ローカルサービスです。この鍵があるのは、Open WebUIの形式が鍵を必要としているからです。空でない文字列なら何でも問題ありません。

ステップ 4:チャットモデルを抽出する

Open WebUIはフル機能のチャットインターフェースでもあり、その優れたテクニックの一つは、会話から直接画像を生成するよう LLMに依頼 できることです。それを実現するには、言語モデルも必要です。

# Lightweight option — runs on almost any machine
docker model pull smollm2

# Recommended — more capable, better at understanding creative prompts
docker model pull gpt-oss

どちらもOpen WebUIモデルセレクターに自動的に表示されます。RAMが限られているならsmollm2 を使い、画像生成前により豊かで創造的な応答を求めるならGPT-OSSを使いましょう。

追加の設定は不要で、Open WebUIはすでに設定されていた同じOPENAI_API_BASEエンドポイントからテキストモデルを取得します。

ステップ 5:最初の画像を生成する

メインチャットビューに戻ってください。メッセージ入力バーに小さな 画像アイコン があるのに気づくでしょう。

Open WebUIで画像を生成する 図 2

画像生成モードを切り替え、プロンプトを入力して送信します。

例えば、次のようなことを試してみてください:

Create an image of a whale.

最初のリクエストはバックエンドがモデルをメモリに読み込むまで少し時間がかかります。その後は、次の画像がより速く生成されます。

Open WebUIで画像を生成する 図 3


Open WebUIは、画像生成リクエストをディフューザーのバックエンドに、テキストリクエストを言語モデルへシームレスにルーティングし、同じ会話で実現します。

ステップ 6:APIを通じて直接画像を生成する

画像生成を自分のアプリに統合したい開発者のために、Docker Model Runnerは標準のOpenAIイメージAPIを直接公開します:

curl -s -X POST http://localhost:12434/engines/diffusers/v1/images/generations \
  -H "Content-Type: application/json" \
  -d '{
    "model": "stable-diffusion",
    "prompt": "A cat sitting on a couch",
    "size": "512x512"
  }'

回答はOpenAI画像APIの形式に完全に従っています。

{
  "created": 1742990400,
  "data": [
    {
      "b64_json": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD..."
    }
  ]
}

画像の復号と保存:

curl -s -X POST http://localhost:12434/engines/diffusers/v1/images/generations \
  -H "Content-Type: application/json" \
  -d '{
    "model": "stable-diffusion",
    "prompt": "A cat sitting on a couch",
    "size": "512x512"
  }' | jq -r '.data[0].b64_json' | base64 -d > cat.png


open cat.png

高度なパラメータ

APIはフルディフューザーパイプラインに期待されるすべてのパラメータをサポートしています:

curl http://localhost:12434/engines/diffusers/v1/images/generations \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "model": "stable-diffusion",
    "prompt": "A serene Japanese zen garden, cherry blossoms, koi pond, photorealistic",
    "negative_prompt": "blurry, low quality, distorted, watermark",
    "size": "768x512",
    "n": 2,
    "num_inference_steps": 30,
    "guidance_scale": 7.5,
    "seed": 42,
    "response_format": "b64_json"
  }'| jq -r '.data[0].b64_json' | base64 -d > garden.png

パラメータ

その役割

プロンプト

画像で求めるもの

negative_prompt

避けたいもの

サイズ

解像度はWIDTHxHEIGHT(例: 512×512、 768×512)

n

生成すべき画像数(1–10)

num_inference_steps

ステップが多い=品質が高く、遅い(デフォルト: 50)

guidance_scale

プロンプトにどれだけ忠実に従うか(1–20、デフォルト: 7.5)

種子

再現可能な結果には整数;ランダムは省略します

プロのコツ: プロンプトを反復しながらシードを設定しましょう。構図に満足したら、それを外して独自の変化を生み出しましょう。

内部:ディフューザーのバックエンドの仕組み

最初にイメージをリクエストしたとき、Docker Model Runner:

  1. DDUFファイルを解凍:モデルコンポーネントを抽出し、DiffusionPipeline.from_pretrained()で読み込みます。
  2. FastAPIサーバーを起動します: これはOpen WebUIとDocker Model Runnerを通じてあなたのcurlコマンドが通信するサーバーです

サーバーは初回使用時に、Docker Hubから自己完結型のPython環境をダウンロードしてインストールします(バージョンピン留めされているため、更新は明示的です)。それは~/.docker/model-runner/diffusers/に存在しており、Pythonのバージョン衝突もなく、virtualenvの設定もありません。

トラブルシューティング

モデルは初回使用時にロードに非常に時間がかかります。それは普通のことで、モデルの重みはディスクから読み込まれてGPUメモリに転送されています。同じセッション内での後続のリクエストは、バックエンドがウォーム状態を保つためはるかに高速になります。

「モデルが読み込まれていません」というエラーが出503モデルが完全にダウンロードされているか(Dockerモデルリスト)か、モデルフィールドに正しいモデル名を送っているか確認してください。

画質が悪い/世代が速すぎるnum_inference_stepsを増やしましょう(2050ステップを試してみてください)。値が高いほど=結果は遅くなりますが、より鮮明です。

OpenWebUIは画像エンドポイントに接続できません 管理パネルのURLを→画像設定→再度確認してください。Dockerコンテナ内では http://model-runner.docker.internal/engines/diffusers/v1、ローカルホストではありません。

結論と今後の展望

Docker Model Runnerはローカルイメージ生成を簡単にします。OpenAI互換APIを通じて画像モデルをパッケージ化・提供し、Open WebUIはその上に簡単なチャットインターフェースを提供しています。これらを組み合わせることで、クラウドサービスに頼らず、ブラウザやAPIを通じて自分のマシン上でプライベートに画像を生成できます。

この機能は多くの可能性を開きます:

  • マルチモーダルワークフロー:テキストモデルとアイデアについてチャットし、そのままその画像を生成する — 同じOpen WebUIの会話内で
  • RAG + 画像生成:ドキュメント用のイラストを生成するパイプラインを構築します
  • カスタムモデル:ディフューザーバックエンドはDDUFパッケージ化されたモデルをすべてサポートしているため、Dockerのモデルパッケージングツールを使って自分で微調整したモデルをパッケージ化できます

Docker Model Runnerチームは、Docker Hubでのモデルサポートを積極的に拡大しています。最新のモデルはdockerモデル検索で確認してください。

関連記事