Docker 容器化

Docker 提供了一种便捷的方式来部署和管理 Ollama。本章介绍 Docker 部署方法。介绍如何使用 Docker 部署 Ollama,包括 CPU 和 GPU 版本的配置。

为什么用 Docker?

优势说明
环境一致开发和生产环境相同
易于部署一条命令完成部署
隔离运行不影响主机环境
方便管理易于启动、停止、更新

基础部署

拉取镜像

docker pull ollama/ollama

运行容器

docker run -d \
  --name ollama \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama

参数说明:

参数说明
-d后台运行
--name ollama容器名称
-v ollama:/root/.ollama数据持久化
-p 11434:11434端口映射

验证运行

# 检查容器状态
docker ps

# 测试 API
curl http://localhost:11434/api/version

GPU 支持

NVIDIA GPU

需要安装 nvidia-container-toolkit:

# Ubuntu/Debian
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | 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://#' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

配置 Docker:

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

运行带 GPU 支持的容器:

docker run -d \
  --gpus=all \
  --name ollama \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama

AMD GPU

docker run -d \
  --device /dev/kfd \
  --device /dev/dri \
  --name ollama \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama:rocm

数据持久化

使用命名卷

docker run -d \
  --name ollama \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama

使用主机目录

docker run -d \
  --name ollama \
  -v /data/ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama

容器管理

基本命令

# 启动容器
docker start ollama

# 停止容器
docker stop ollama

# 重启容器
docker restart ollama

# 删除容器
docker rm -f ollama

# 查看日志
docker logs ollama

# 实时查看日志
docker logs -f ollama

进入容器

docker exec -it ollama /bin/bash

在容器中运行命令

# 拉取模型
docker exec -it ollama ollama pull llama3.2

# 运行模型
docker exec -it ollama ollama run llama3.2

# 查看模型列表
docker exec -it ollama ollama list

Docker Compose

创建配置文件

version: '3.8'

services:
  ollama:
    image: ollama/ollama
    container_name: ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - ollama:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

volumes:
  ollama:

启动服务

docker-compose up -d

管理服务

# 停止
docker-compose down

# 重启
docker-compose restart

# 查看日志
docker-compose logs -f

环境变量配置

docker run -d \
  --name ollama \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  -e OLLAMA_HOST=0.0.0.0:11434 \
  -e OLLAMA_ORIGINS="*" \
  ollama/ollama

常用环境变量:

变量说明
OLLAMA_HOST监听地址
OLLAMA_ORIGINS允许的跨域来源
OLLAMA_MODELS模型存储路径
OLLAMA_DEBUG调试模式

网络配置

自定义网络

# 创建网络
docker network create ollama-network

# 运行容器
docker run -d \
  --name ollama \
  --network ollama-network \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama

与其他服务连接

version: '3.8'

services:
  ollama:
    image: ollama/ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama:/root/.ollama

  webui:
    image: ghcr.io/open-webui/open-webui:main
    ports:
      - "3000:8080"
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    depends_on:
      - ollama

volumes:
  ollama:

更新镜像

# 拉取最新镜像
docker pull ollama/ollama

# 停止并删除旧容器
docker stop ollama
docker rm ollama

# 使用新镜像运行
docker run -d \
  --name ollama \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama

备份与恢复

备份数据

# 创建备份
docker run --rm \
  -v ollama:/data \
  -v $(pwd):/backup \
  alpine tar czf /backup/ollama-backup.tar.gz /data

恢复数据

# 恢复备份
docker run --rm \
  -v ollama:/data \
  -v $(pwd):/backup \
  alpine tar xzf /backup/ollama-backup.tar.gz -C /

常见问题

容器无法启动

检查日志:

docker logs ollama

GPU 未识别

确保安装了 nvidia-container-toolkit 并重启了 Docker。

端口冲突

修改端口映射:

docker run -d \
  --name ollama \
  -p 8080:11434 \
  ollama/ollama