Ollama×Docker:コンテナで実現するクリーンなAI開発環境
01. はじめに
Ollamaはバイナリ一つで動く手軽さが魅力ですが、開発チームで環境を統一したり、本番サーバーにデプロイしたりする場面では、ホストOSに直接インストールする方法には限界があります。「私のPCでは動くけど、本番環境では動かない」といった問題を避けるため、現代のアプリ開発においてコンテナ化は必須の要件です。
本記事では、OllamaをDockerコンテナとして起動・管理する方法を徹底解説します。特にハードルが高いと思われがちな「コンテナからのGPU利用」についても、具体的な設定例を交えて紹介します。
02. なぜDockerで動かすのか
環境の隔離、再現性の担保、そして他のマイクロサービス(WebUIやRAGバックエンド)との連携のしやすさが最大の理由です。
ホストOSを汚さずにOllamaのバージョンアップや切り替えが容易に行えるほか、volumeマウントを利用することで、数GBに及ぶ巨大なモデルデータを特定ディレクトリに集約・永続化できるというストレージ管理上のメリットもあります。
03. CPU環境でのセットアップ
GPUを使わない、またはIntel Macなどの環境では非常にシンプルです。
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
このコマンド一つで、Ollama APIサーバーがポート11434で立ち上がります。-v ollama:/root/.ollama
は、ダウンロードしたモデルデータをコンテナ削除後も保持するためのボリューム設定です。
コンテナ内でモデルを実行するには以下のようにします。
docker exec -it ollama ollama run llama3
04. GPUパススルーの設定 (NVIDIA)
Linux + NVIDIA GPU環境でパフォーマンスを引き出すには、NVIDIA Container Toolkit のインストールが必要です。
まずはホスト側でツールキットをセットアップした後、--gpus=all フラグを付けてコンテナを起動します。
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
これでOllamaがGPUを認識し、推論処理をオフロードします。ログを確認し、NVIDIA GPU detected と表示されていれば成功です。
05. docker-composeによる一元管理
現場ではdocker-compose.ymlで管理するのが一般的です。Ollama本体と、それを操作するWebUI(例: Open WebUI)をセットで立ち上げる構成例を紹介します。
version: '3.8'
services:
ollama:
image: ollama/ollama:latest
ports:
- 11434:11434
volumes:
- ./ollama-data:/root/.ollama
# deploy: # GPU使用時のみコメントアウト解除
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: 1
# capabilities: [gpu]
open-webui:
image: ghcr.io/open-webui/open-webui:main
ports:
- 3000:8080
environment:
- OLLAMA_BASE_URL=http://ollama:11434
volumes:
- ./webui-data:/app/backend/data
depends_on:
- ollama
docker-compose up -d するだけで、localhost:3000
にアクセスすればChatGPTのようなチャット画面が立ち上がり、裏ではOllamaが動いているという最強の環境が完成します。
06. まとめ
Dockerを活用することで、Ollamaの運用は劇的に楽になります。特にチーム開発やサーバーデプロイを考えている場合は、早い段階でDockerベースのワークフローに移行することをお勧めします。
MacのDocker Desktopではパフォーマンスが低下する場合があります。Apple Silicon Macの場合はDockerを使わず、ホストOSに直接インストールするほうが高速なケースが多い点には留意してください。
次回は、今回少し登場した「Open WebUI」について、その詳細な機能と設定方法を深掘りします。
コメント
コメントを投稿