Docker Composeを使ってOllamaとOpen WebUIを構築するための完全ガイドです。GPUサポートの設定、モデルのダウンロード、外部PCからのアクセスまで、初心者でも迷わず進められる手順を詳細に解説します。
目次
- 1. 手順
- 2. Docker Composeの停止方法
- 3. データ永続化の確認
- 4. 確認方法
- 5. 注意事項
- 6. LLMのインストール
- 7. インストールしたLLMの削除方法
- 8. 外部のPCからOpen WebUIにアクセスする方法
1. 手順
`docker-compose.yml`は、プロジェクトのルートディレクトリに作成し、そのディレクトリでDocker Composeコマンドを実行します。以下に具体的な手順を示します。
1.1 ディレクトリの作成
プロジェクト用のディレクトリを作成します。たとえば、`~/test/ollama_project`というディレクトリを作成します。
mkdir -p ~/test/ollama_project
cd ~/test/ollama_project
1.2 `docker-compose.yml`の作成
作成したディレクトリ内に`docker-compose.yml`ファイルを作成します。
nano docker-compose.yml
上記コマンドでエディタを開き、以下の内容を貼り付けます。
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434"
volumes:
- ~/test/ollama_project/ollama:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
environment:
- OLLAMA_HOST=0.0.0.0:11434
restart: unless-stopped
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
volumes:
- ~/test/ollama_project/open-webui:/app/backend/data
depends_on:
- ollama
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_SECRET_KEY=
extra_hosts:
- "host.docker.internal:host-gateway"
restart: unless-stopped
保存してエディタを閉じます。
1.3 Docker Composeの実行
`docker-compose.yml`を配置したディレクトリ(例: `~/test/ollama_project`)で以下のコマンドを実行します。
docker compose up -d
このコマンドにより、OllamaとOpen WebUIのコンテナがバックグラウンドで起動します。
2. Docker Composeの停止方法
2.1 停止コマンドの実行
`docker-compose.yml`を配置したディレクトリ(例: `~/test/ollama_project`)で以下のコマンドを実行します。
docker compose stop
このコマンドにより、すべてのコンテナが停止しますが、ネットワークやボリュームは削除されません。
完全に削除したい場合は以下のコマンドを使用します。
docker compose down
`docker compose down`は、コンテナの停止に加え、ネットワークやボリュームも削除します。
2.2 用途の違い
- docker compose stop: コンテナを一時的に停止します。再度起動する場合は、`docker compose start`を使用します。
- docker compose down: コンテナを停止し、ネットワークやボリュームも削除します。再度起動する場合は、`docker compose up`を使用します。
2.3 停止後の確認
停止後、動作中のコンテナがないことを確認するには以下を実行します。
docker ps
出力が空であれば、すべてのコンテナが停止しています。
3. データ永続化の確認
- データはホスト側の`~/test/ollama_project/ollama`と`~/test/ollama_project/open-webui`に保存されます。
- コンテナが削除されても、このディレクトリ内のデータは保持されます。
4. 確認方法
- Ollamaが動作しているか確認するには、APIエンドポイントにアクセスします:
curl http://localhost:11434/models
- Open WebUIはブラウザで以下にアクセスして確認します:
http://localhost:3000
5. 注意事項
- `docker-compose.yml`は、必ず実行するディレクトリ内に配置してください。
- NVIDIA GPUが正しく認識されているか確認するため、事前に以下を実行してください:
nvidia-smi
- WSL2環境では、NVIDIA Container Toolkitがインストールされている必要があります。
6. LLMのインストール
6.1 LLMのインストール
コンテナ内で「gemma3:12b」モデルをインストールするには、以下のコマンドを実行します。
docker exec ollama ollama pull gemma3:12b
6.2 インストールの確認
インストールが完了したら、以下のコマンドでインストール済みモデルを確認できます。
docker exec ollama ollama list
6.3 LLMの起動と利用
インストールしたLLMを起動して使用するには、以下のコマンドを実行します。
docker exec -it ollama ollama run gemma3:12b
7. インストールしたLLMの削除方法
7.1 削除コマンドの実行
コンテナ内で不要になったLLMを削除するには、以下のコマンドを実行します。
例: gemma3:12bモデルを削除する場合
docker exec ollama ollama rm gemma3:12b
7.2 削除後の確認
削除が完了したら、インストール済みモデルを確認して削除されたことを確認します。
docker exec ollama ollama list
出力に削除したモデルが含まれていなければ、正常に削除されています。
8. 外部のPCからOpen WebUIにアクセスする方法
WindowsのWSLで起動したDocker上のOpen WebUIに外部(例: Mac)からアクセスする方法を説明します。Dockerのポートマッピング機能を利用してホストのポート3000を公開するため、事前に以下の点を確認してください。
事前確認
1. ポートの競合確認: ホスト側でポート3000が既に利用されていないことを確認します。
コマンドプロンプトまたはPowerShellで以下を実行してください。
netstat -ano | findstr :3000
2. 不要なポートプロキシ設定の削除: Dockerでホストポート3000を使用する場合、以前設定したポートプロキシが競合の原因となります。既に設定している場合は、以下のコマンドで削除してください。
netsh interface portproxy delete v4tov4 listenport=3000 listenaddress=0.0.0.0
8.1 ファイアウォールルールの追加
ホストのWindows側でTCPポート3000への着信トラフィックを許可するには、以下のPowerShellコマンドを管理者権限で実行してください。
New-NetFirewallRule -Name "Open-WebUI" -DisplayName "Allow Open-WebUI Port 3000" -Direction Inbound -LocalPort 3000 -Protocol TCP -Action Allow -Profile Any
このコマンドは、ドメイン、プライベート、パブリックすべてのプロファイルに対して、TCPポート3000の着信通信を許可します。
8.2 ファイアウォールルールの確認
作成したファイアウォールルールを確認するには、以下のコマンドを実行してください。
Get-NetFirewallRule -Name "Open-WebUI" | Format-List *
出力にルールの詳細情報が表示されれば、設定は正しく適用されています。
8.3 外部PCからの接続
外部PC(例: Mac)のブラウザから以下のURLにアクセスしてください。
http://[WindowsホストのIPアドレス]:3000
例として、WindowsホストのIPアドレスが192.168.10.11
の場合、http://192.168.10.11:3000
にアクセスします。