DockerでローカルLLMを始める(Ollama + Open WebUI)
ローカルでLLMを試すための最小構成をDocker Composeで用意しました。ブラウザ(Open WebUI)からの利用と、OllamaのAPIの基本的な呼び出し方を簡単にまとめています。
対象リポジトリ: practice-llm-mcp(Composeと初期化スクリプトを同梱)
クイックスタート
前提条件
- Docker と Docker Compose が導入済み
- 初回のみモデルのダウンロードが発生(ネットワーク接続が必要)
- リポジトリ取得
| |
- コンテナ起動
| |
- 動作確認(ブラウザ / API)
- ブラウザ: http://localhost:8080 へアクセス
- API:
curlで確認
| |
停止する場合:
| |
コンポーネント概要(Ollama / Open WebUI)
Ollama
- 役割: ローカルでLLMモデルを実行するエンジン(HTTP 11434 でAPI提供)
- 取得:
ollama pull <model>でモデルをダウンロード - 保存: 本構成では
./ollama/dataに永続化
Open WebUI
- 役割: ブラウザからOllamaを利用するためのUI
- 接続:
OLLAMA_BASE_URLで Ollama に接続(Composeではhttp://ollama:11434) - アクセス: http://localhost:8080
- 保存: 会話履歴等は
./webui/dataに保存
構成のポイント
1) docker compose
compose.yml では以下の2サービスを定義しています。
ollama- ポート
11434を公開(API) - モデルを
./ollama/dataに永続化 - 起動後の初期化でモデルを準備(
init.sh)
- ポート
open-webui- ポート
8080でWeb UIを提供 OLLAMA_BASE_URL=http://ollama:11434depends_on: [ollama]
- ポート
2) Ollamaの初期化
ollama/init.sh で、Ollamaの待ち受け開始を確認した後にモデルをまとめて取得します(初回のみ時間がかかります)。取得対象の例:
phi3:minillama3:8bqwen:7b-chatmistral- 埋め込み用途:
gte-small,e5-small-v2,nomic-embed-text
不要なモデルがある場合は、init.sh の ollama pull 行を調整してください。
利用可能なモデルはlibraryを参考にしてください。
3) Makefile
基本操作のショートカットです。
make run… 起動(docker compose up -d)make down… 停止make logs… ログ確認make restart… 再ビルド+再起動
補足メモ
ポート
11434: Ollama HTTP API(/api/chatと/api/generate)8080: Open WebUI
永続化
- モデルは容量が大きいため、
./ollama/dataに保存して再ダウンロードを避けます - WebUI のデータは
./webui/dataに保存します
- モデルは容量が大きいため、
起動順制御
depends_onに加えてinit.shで疎通確認を行います
モデル選定
- まずは軽量な
phi3:miniで確認 →qwen:7b-chatやllama3:8bへ拡張
- まずは軽量な
よくあるハマりどころ
初回起動が長い
- モデルのダウンロード時間がかかります。
make logsで進捗を確認してください
- モデルのダウンロード時間がかかります。
ポート競合
compose.ymlのポートマッピング(例:11434:11434)の左側を空いている番号に変更します
WebUIは開けるが応答がない
open-webuiのOLLAMA_BASE_URLがhttp://ollama:11434か、ollamaコンテナが起動しているかを確認します
権限エラー
sudoを付けるか、ユーザーをdockerグループへ追加します
まとめ
以下の手順でローカルLLM環境を用意できます。
docker compose up -d(またはmake run)- ブラウザは http://localhost:8080、API は http://localhost:11434
必要に応じて取得するモデルやポート番号を調整しながら、用途に合わせて拡張してください。