OllamaとOpen WebUIを簡単構築:Docker Compose完全ガイド

Docker Composeを使ってOllamaとOpen WebUIを構築するための完全ガイドです。GPUサポートの設定、モデルのダウンロード、外部PCからのアクセスまで、初心者でも迷わず進められる手順を詳細に解説します。

目次


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にアクセスします。