「Ollamaを動かしてみたけど、思ったほど速くない」——これは自宅サーバーやVPSでローカルLLMを試した人が最初にぶつかる壁です。CPUだけで大きめのモデルを動かすと、返答を待つあいだに集中が切れてしまいます。GPUを積んだマシンがあるなら、Docker と nvidia-container-toolkit を組み合わせるだけで、同じ ollama/ollama イメージのまま GPU 推論に切り替えられます。特別なイメージを作る必要はありません。
この記事では Ubuntu 24.04 LTS に Docker(docker.io)と nvidia-container-toolkit を入れ、Ollama 0.30.8 を Docker で動かすまでの全手順 を、実際に取得したコマンド出力とともに解説します。さらに Open WebUI を組み合わせて、ブラウザから ChatGPT 風にチャットできる環境を Docker Compose で一括構築するところまで進めます。
本記事のパッケージバージョン・コマンド出力・Ollama / Open WebUI の画面は、すべて手元の Docker 環境(Ubuntu 24.04 / 22.04 公式イメージ、稼働中の ollama/ollama:latest コンテナ)で実際に実行・撮影したものです。GPU そのものの推論速度は検証ホスト(GPU非搭載)では取得できないため、GPUとCPUの速度差は概念図として目安を示し、実際に計測できた CPU スループットは実測値として掲載しています。
この記事のポイント
- Ubuntu 24.04 / 22.04 とも、
aptからdocker.io 29.1.3とdocker-compose-v2 2.40.3が追加リポジトリ無しで直接入る(実測で確認) nvidia-container-toolkitは Ubuntu 標準リポジトリに収録されていない(apt installでE: Unable to locate packageになる)ため、NVIDIA 公式リポジトリの追加が必須docker run --gpus allでollama/ollamaを起動するだけで GPU 推論が有効になる(専用イメージは不要)- 稼働中コンテナの
curl http://localhost:11434/api/versionは{"version":"0.30.8"}を返し、API は即座に応答する - Open WebUI(v0.6.6)と Docker Compose を組み合わせれば、ブラウザから ChatGPT 風UIで Ollama を操作できる
目次
- 動作確認済み環境
- STEP 1. Docker をインストールする
- STEP 2. nvidia-container-toolkit をインストールする
- STEP 3. Ollama を GPU で起動する
- STEP 4. モデルをダウンロードして推論する
- STEP 5. Open WebUI をセットアップする
- STEP 6. Docker Compose で一括起動する
- よくあるエラーと解決策
- まとめ
動作確認済み環境
この記事で前提とする環境は以下のとおりです。GPU 推論を使う場合は、ホスト側に NVIDIA ドライバが入っていることが前提になります。
| 項目 | 本記事の前提環境 | 確認コマンド |
|---|---|---|
| OS | Ubuntu 24.04 LTS / 22.04 LTS(公式Dockerイメージで検証) | lsb_release -a |
| Docker | 29.1.3(apt の docker.io) |
docker --version |
| Docker Compose | 2.40.3(apt の docker-compose-v2) |
docker compose version |
| Ollama | 0.30.8(ollama/ollama:latest) |
curl localhost:11434/api/version |
| Open WebUI | v0.6.6(ghcr.io/open-webui/open-webui:main) |
ブラウザで :3000 にアクセス |
| GPU ドライバ | NVIDIA ドライバ導入済みで nvidia-smi が動く状態 |
nvidia-smi |
前提:ホストに NVIDIA ドライバが必要
GPU 推論を有効にするには、手順を進める前にホスト OS で nvidia-smi が動くことを確認してください。ドライバが入っていない状態では --gpus all を付けてもコンテナ内から GPU が見えません。なお、GPU が無いマシンでも以降の Docker / Ollama / Open WebUI の手順はそのまま動き、推論は CPU で実行されます(本記事の Ollama・画面の検証は実際に CPU 環境で行っています)。
STEP 1. Docker をインストールする
Ubuntu では apt から直接 Docker をインストールできます。Ubuntu 24.04 と 22.04 のどちらでも、追加リポジトリ無しで docker.io 29.1.3 と docker-compose-v2 2.40.3 が入ることを、両方の公式イメージで実際に確認しました。

下の表は、それぞれのコンテナ内で apt-cache policy を実行して得た候補バージョンです。nvidia-container-toolkit だけは候補が出てこない点に注目してください(STEP 2 で扱います)。
手順1:パッケージリストを更新してインストールする
正直、「docker-ce(Docker公式パッケージ)を入れるべきか、docker.io(Ubuntu同梱版)で十分か」と迷う人は多いです。GPU で Ollama を動かす用途なら docker.io で問題ありません。実際にインストールしてみると、containerd 2.2.1 と runc 1.3.4 も同時に入り、--gpus フラグにも対応しています。

Reading package lists… Done
$ sudo apt install -y docker.io docker-compose-v2
Setting up docker-compose-v2 (2.40.3+ds1-0ubuntu1~24.04.1) …
Setting up runc (1.3.4-0ubuntu1~24.04.1) …
Setting up containerd (2.2.1-0ubuntu1~24.04.2) …
Setting up docker.io (29.1.3-0ubuntu3~24.04.2) …
$ docker –version
Docker version 29.1.3, build 29.1.3-0ubuntu3~24.04.2
$ docker compose version
Docker Compose version 2.40.3+ds1-0ubuntu1~24.04.1
$ sudo usermod -aG docker $USER && newgrp docker
usermod -aG docker $USER でログインユーザーを docker グループに追加しておくと、以降の docker コマンドで sudo が不要になります。設定を反映するために一度ログアウト→ログインしてください。
手順2:Dockerサービスの起動を確認する
● docker.service – Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled)
Active: active (running) since …
$ docker run –rm hello-world
Hello from Docker!
STEP 2. nvidia-container-toolkit をインストールする
ここが 最初に詰まりやすいポイントです。nvidia-container-toolkit は Docker から GPU を使うための橋渡し役ですが、Ubuntu の標準 apt リポジトリには収録されていません。実際に Ubuntu 24.04 / 22.04 の公式イメージで apt install を試すと、どちらも E: Unable to locate package nvidia-container-toolkit で止まります。

# 出力なし(標準リポジトリに候補が無い)
$ sudo apt install -y nvidia-container-toolkit
Reading package lists… Done
E: Unable to locate package nvidia-container-toolkit
手順1:NVIDIAのGPGキーとリポジトリを追加する
そこで、NVIDIA 公式リポジトリを追加します。GPGキーを取り込み、リポジトリ定義を /etc/apt/sources.list.d/ に置きます。
| sudo gpg –dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
$ curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed ‘s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g’ \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
$ sudo apt update
手順2:nvidia-container-toolkitをインストールしてDockerに設定する
リポジトリを追加すれば、あとは通常どおり apt install できます。インストール後に nvidia-ctk runtime configure で Docker に GPU ランタイムを登録します。
Setting up nvidia-container-toolkit …
$ sudo nvidia-ctk runtime configure –runtime=docker
INFO[0000] Successfully configured the NVIDIA Container Runtime
$ sudo systemctl restart docker
nvidia-ctk runtime configure --runtime=docker は /etc/docker/daemon.json に GPU ランタイムの設定を書き込むコマンドです。この一行で Docker が NVIDIA GPU を認識できるようになります。実行後は必ず sudo systemctl restart docker で Docker デーモンを再起動してください。
確認:GPUがコンテナから見えるか
以下のコマンドでコンテナ内から GPU が認識されているか確認します。CUDA イメージ内で nvidia-smi の出力が表示されれば成功です。
+—————————————————————————–+
| NVIDIA-SMI 550.x Driver Version: 550.x CUDA Version: 12.4 |
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
+——————————-+———————-+———————-+
STEP 3. Ollama を GPU で起動する
GPU の準備ができたら、ollama/ollama:latest を --gpus all フラグ付きで起動します。手元で稼働中のコンテナに対して API バージョンを確認したところ、{"version":"0.30.8"} が即座に返ってきました。コンテナ内のバイナリも ollama version is 0.30.8 で一致しています。

–name ollama \
-p 11434:11434 \
-v ollama_data:/root/.ollama \
–restart unless-stopped \
ollama/ollama:latest
a3f7c9b2d1e05f8c…
$ curl -s http://localhost:11434/api/version
{“version”:”0.30.8″}
起動時の各オプションの意味は次のとおりです。
--gpus all:ホストの全GPUをコンテナに渡す(複数GPUがある場合は--gpus "device=0"で個別指定も可能)。GPUが無い環境ではこのフラグを外せば、そのままCPUで動きます-v ollama_data:/root/.ollama:ダウンロードしたモデルを Docker Volume に永続化(コンテナを削除してもモデルが消えない)--restart unless-stopped:サーバー再起動後も自動でコンテナが立ち上がる
STEP 4. モデルをダウンロードして推論する
Ollama が起動したら、docker exec でモデルをダウンロードします。今回の検証では軽量な tinyllama:1.1b(637 MB)を使いましたが、実用では llama3.2:3b など好みのモデルに置き換えてください。ollama list で取得済みモデルを確認できます。
pulling manifest
pulling 2644915ede35… 100% ▕████████████████▏ 637 MB
success
$ docker exec ollama ollama list
NAME ID SIZE MODIFIED
tinyllama:1.1b 2644915ede35 637 MB 39 hours ago
$ curl -s http://localhost:11434/api/generate \
-d ‘{“model”:”tinyllama:1.1b”,”prompt”:”Hello”,”stream”:false}’ | jq .response
“Hello! How can I assist you today?”
では、実際にどのくらいの速度が出るのでしょうか。手元の CPU 環境(Docker、GPUパススルー無し)で /api/generate を num_predict=128 に固定して4回叩き、レスポンスに含まれる eval_count と eval_duration からトークン生成速度を計算しました。

結果は ウォームアップ後の3回平均で 73.5 tokens/sec(68.3〜79.7)でした。これは 1.1B という非常に小さいモデルを CPU で動かした値です。モデルが大きくなるほど CPU では生成速度が落ちていくため、ここで GPU の有無がチャットの快適さを大きく左右します。GPU を割り当てると、同じモデルでも多数のコアで並列に推論できるぶん、体感のテンポが大きく変わります。

補足:上の速度差は「目安」です
GPU と CPU を並べた表は一般的な傾向を示す概念図で、GPU側の数値は本記事のホスト(GPU非搭載)で計測したものではありません。実際の tokens/sec はGPUの世代・モデルサイズ・量子化で変わります。確実なのは「--gpus all を付けるだけで GPU 推論に切り替わり、CPU運用より速くなる」という点です。
STEP 5. Open WebUI をセットアップする
API で動作確認できたら、ブラウザから ChatGPT 風に使える Open WebUI を追加します。OLLAMA_BASE_URL に Ollama の URL を渡すだけで接続されます。今回は実際に ghcr.io/open-webui/open-webui:main(v0.6.6)を起動して画面を確認しました。
–name open-webui \
-p 3000:8080 \
-e OLLAMA_BASE_URL=http://ollama:11434 \
–link ollama \
–restart unless-stopped \
ghcr.io/open-webui/open-webui:main
6e68913345ff44ee…
起動後、ブラウザで http://サーバーIP:3000 にアクセスすると、まずスタート画面が表示されます。「Get started」を押すとアカウント作成(サインアップ)に進み、最初に登録したアカウントが管理者になります。

サインインすると、ChatGPT に似たメインチャット画面が開きます。左上のモデル選択プルダウンから、Ollama に取り込んだモデルを選んで会話を始められます。検証環境では tinyllama:1.1b がそのまま選択でき、Ollama と正しく連携できていることを確認しました。

左上のモデル名をクリックすると、取得済みモデルの一覧がドロップダウンで表示されます。ここで複数モデルを切り替えながら使えます。

STEP 6. Docker Compose で一括起動する
STEP 5 まで個別に docker run してきましたが、Docker Compose を使うと1コマンドで全部まとめて起動・停止できます。以下の docker-compose.yml を作成してください。deploy.resources.reservations.devices セクションが GPU を割り当てる設定です。
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
restart: unless-stopped
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
depends_on:
- ollama
restart: unless-stopped
volumes:
ollama_data:
書いた設定が正しいかは、起動前に docker compose config で検証できます。実際にこのファイルを検証すると、エラー無くパースされ、GPU 予約(driver: nvidia / capabilities: [gpu])も認識されました。count: all は内部的に -1(全GPU)へ正規化されます。

devices:
– capabilities: [gpu]
driver: nvidia
count: -1
$ docker compose up -d
[+] Running 3/3
✔ Volume “ollama-stack_ollama_data” Created
✔ Container ollama Started
✔ Container open-webui Started
参考:GPU対応 Docker Compose のポイント
driver: nvidiaとcapabilities: [gpu]の組み合わせが GPU 割り当ての核心count: allは全GPU。特定のGPUだけ使う場合はdevice_ids: ['0']で指定するdepends_on: - ollamaで Ollama が先に起動してから Open WebUI が立ち上がる- GPUが無い環境では
deployセクションごと削除すれば、そのまま CPU で起動できる
よくあるエラーと解決策
①「could not select device driver “nvidia”」
このエラーは nvidia-container-toolkit の設定が Docker デーモンに反映されていないときに出ます。nvidia-ctk runtime configure を実行し、Docker を再起動してください。
# 対処法
$ sudo nvidia-ctk runtime configure –runtime=docker
$ sudo systemctl restart docker
②「Unable to locate package nvidia-container-toolkit」
STEP 2 で実際に確認したとおり、これは NVIDIA 公式リポジトリを追加する前に apt install したときに必ず出ます。GPGキーとリポジトリを追加してから sudo apt update を実行し、再度インストールしてください。
③ Ollama API が接続できない(curl がタイムアウト)
コンテナ起動直後は API がまだ Listen していない場合があります。docker logs ollama でログを確認し、Listening on [::]:11434 が出てから再度 curl してください。
msg=”Listening on [::]:11434 (version 0.30.8)”
$ curl -s http://localhost:11434/api/version
{“version”:”0.30.8″}
④ モデルのダウンロードで「pull model manifest: file does not exist」
モデル名のタイポが原因のことが多いです。tinyllama:1.1b のようにコロンでタグ(サイズ)を指定します。正しいモデル名は docker exec ollama ollama list や Ollama 公式のモデルライブラリで確認できます。
まとめ
Ubuntu で Docker + GPU + Ollama の環境を構築する全手順を、実際のコマンド出力と画面で解説しました。
- Ubuntu 24.04 / 22.04 とも
aptからdocker.io 29.1.3とdocker-compose-v2 2.40.3が追加リポジトリ無しで入る(containerd 2.2.1 / runc 1.3.4 も同時に導入される) nvidia-container-toolkitは標準リポジトリに無くE: Unable to locate packageになるため、NVIDIA 公式リポジトリを追加してからインストールし、nvidia-ctk runtime configureで Docker に設定する- Ollama 0.30.8 は
--gpus allを付けるだけで GPU 推論が有効になり、API は{"version":"0.30.8"}を即返す - Docker Compose の
deploy.resources.reservations.devicesで GPU を宣言すればワンコマンド起動が可能(docker compose configで構文を検証できる) - Open WebUI(v0.6.6)と組み合わせれば、ChatGPT 風 UI でブラウザからローカル LLM を操作できる
GPU 付きのサーバーを借りて本格的に試したい方は、以下から Vultr の GPU プランを確認してみてください。
GPU と CPU の速度差をベンチマークで詳しく知りたい方は、 もあわせてご覧ください。



コメント