使用 Docker Compose 实现灵活部署与管理 Ollama
使用 Docker Compose 实现灵活部署与管理 Ollama

使用 Docker Compose 实现灵活部署与管理 Ollama

官方docker安装:Docker – Ollama

参考文档:使用 Docker Compose 实现灵活部署与管理 Ollama Ollama 作为一款流行的本地大语言模型运行框架 – 掘金

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

安装OIIama

Nvidia GPU

安装 NVIDIA容器工具包

第一步:创建配置与数据目录

首先,在用户主目录下创建一个专门用于存放 Ollama 相关文件的目录:

接下来,在此目录中创建两个核心文件:docker-compose.yml 和 update-ollama.sh (更新容器的脚本)。

services:
  ollama:
    # 使用官方最新镜像
    image: ollama/ollama:latest
    # 定义容器名称,方便管理
    container_name: ollama
    # 设置重启策略:除非手动停止,否则容器将在退出后自动重启
    restart: unless-stopped
    environment:
      # 配置允许访问 Ollama API 的来源地址。'*' 表示允许所有来源。
      # 注意:安全性自己保障,我这里是为了LobeChat 使用方便
      - OLLAMA_ORIGINS=*
    ports:
      # 将宿主机的 11434 端口映射到容器内的 11434 端口
      - "11434:11434"
    volumes:
      # 将宿主机的 ~/.ollama/data 目录挂载到容器内的 /root/.ollama 目录
      # 这是 Ollama 存储模型文件和元数据的地方,实现数据的持久化存储。
      - ./ollama/data:/root/.ollama
    deploy:
      # --- 资源部署配置段 ---
      resources:
        reservations:
          # GPU 资源预留配置 (仅当需要并配置了 NVIDIA GPU 时启用)
          devices:
            # 指定使用 nvidia 驱动
            - driver: nvidia
              # 使用所有检测到的 NVIDIA GPU
              count: all
              # 请求 GPU 相关能力
              capabilities: [gpu]
      # --- GPU 配置段结束 ---

配置解读

  • image: 指定使用官方 ollama/ollama:latest 镜像。
  • container_name: 将容器命名为 ollama,便于后续通过名称进行操作。
  • restart: unless-stopped: 确保容器具有较好的自恢复能力。
  • environment: OLLAMA_ORIGINS=* 设置允许所有来源访问 API,便于本地开发和测试。
  • ports: 将宿主机的 11434 端口暴露出来,映射到容器的同名端口,使得可以通过 http://<宿主机IP>:11434 访问 Ollama API。
  • volumes: 这是实现数据持久化和便捷迁移的关键。将宿主机的 ~/.ollama/data 目录映射到容器内 Ollama 的工作目录。所有下载的模型和相关数据都将保存在宿主机上,即使容器被删除重建,数据依然保留。迁移时只需复制 ~/.ollama 目录。
  • deploy.resources.reservations.devices: 特别说明:此部分用于配置 NVIDIA GPU 加速。如果你使用的是 Apple Silicon (M系列芯片) 的 Mac,Docker Desktop for Mac 通常会自动利用 Metal 实现 GPU 加速,一般不需要此 deploy 配置,可以将其整个移除。对于其他平台,如果你没有 NVIDIA GPU 或不打算使用 GPU 加速,也应移除此 deploy 部分。若要启用 NVIDIA GPU 支持,请确保已正确安装 NVIDIA Container Toolkit 并配置 Docker。

第三步:创建 update-ollama.sh 更新脚本

为了方便地将 Ollama 更新到最新版本,我们创建一个更新脚本 update-ollama.sh

#!/bin/bash

# 自动更新 Ollama Docker 服务的脚本
# 创建日期: $(date)

# 设置脚本在遇到错误时立即退出
set -e

# 定义日志文件路径 (确保目录存在)
LOG_FILE="$HOME/.ollama/update.log"
mkdir -p "$(dirname "$LOG_FILE")" # 如果目录不存在,则创建

# 日志记录函数,同时输出到控制台和日志文件
log() {
    local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
    echo "[$timestamp] $1" | tee -a "$LOG_FILE"
}

# 错误处理函数
handle_error() {
    log "错误:脚本在第 $1 行执行失败。"
    log "Ollama 更新过程意外中止。"
    exit 1
}

# 设置错误捕获
trap 'handle_error $LINENO' ERR

# 开始更新流程
log "启动 Ollama 更新程序..."

# 切换到包含 docker-compose.yml 的目录
cd "$HOME/.ollama" || { log "错误:无法切换到目录 $HOME/.ollama"; exit 1; }

# 拉取最新的 ollama/ollama 镜像
log "正在拉取最新的 Ollama 镜像: ollama/ollama:latest..."
if ! docker pull ollama/ollama:latest; then
    log "错误:拉取最新镜像失败。请检查网络连接或 Docker Hub 状态。"
    exit 1
fi
log "成功拉取最新镜像。"

# 优雅地停止当前运行的服务
log "正在停止当前的 Ollama 服务 (容器: ollama)..."
# 设置超时时间,并移除孤立的容器(如果存在)
if ! docker-compose down --timeout 120 --remove-orphans; then
    log "警告:'docker-compose down' 执行时遇到问题,但将继续尝试。"
    # 作为备用方案,尝试直接停止和移除容器
    if docker ps -a --format '{{.Names}}' | grep -q "^ollama$"; then
        log "尝试直接停止并移除 'ollama' 容器..."
        docker stop ollama || log "警告:停止 'ollama' 容器失败。"
        docker rm ollama || log "警告:移除 'ollama' 容器失败。"
    fi
fi
log "旧的 Ollama 服务已停止。"

# 使用新的镜像启动服务
log "正在使用最新镜像启动 Ollama 服务 (docker-compose up -d)..."
if ! docker-compose up -d; then
    log "错误:启动 Ollama 服务失败 ('docker-compose up -d')。请检查 Docker Compose 配置和 Docker 状态。"
    exit 1
fi

# 验证服务是否成功启动
log "正在验证 Ollama 服务状态..."
# 等待几秒钟让容器充分启动
sleep 5
if docker-compose ps | grep -q "ollama.*(Up|running)" ; then # 检查状态是否为 Up 或 running
    log "成功!Ollama 服务已使用最新镜像启动并运行。"
else
    log "错误:更新后 Ollama 服务未能正常启动。请检查容器日志:'docker logs ollama'"
    # 输出容器日志以帮助诊断
    docker logs ollama || true
    exit 1
fi

# 清理不再使用的旧 Docker 镜像 (可选但推荐)
log "正在清理未使用的 Docker 镜像..."
docker image prune -f
log "镜像清理完成。"

log "Ollama 更新过程顺利完成。"

# 尝试获取并输出当前运行的 Ollama 版本
log "正在尝试获取当前 Ollama 版本..."
CURRENT_VERSION=$(docker exec ollama ollama --version 2>/dev/null || echo "无法确定版本")
log "当前 Ollama 版本: $CURRENT_VERSION"

exit 0

运行模型

ollama官方模型

进入容器

docker exec -it ollama bash
ollama --version    :oiiama当前版本
ollama ps    #查看运行中的模型
ollama list    #查看已下载模型

模型生命周期管理

操作命令描述
下载模型ollama pull <name>仅下载不运行
删除模型ollama rm <name>释放磁盘空间
复制模型ollama cp src dest创建模型副本
查看模型详情ollama show <name>显示模型参数和配置信息

模型管理

# 拉取模型
docker exec -it ollama ollama pull deepseek-r1:8b

# 查看已安装模型
docker exec -it ollama ollama list

# 删除模型
docker exec -it ollama ollama rm deepseek-r1:8b

模型库

GitHub – ollama/ollama: Get up and running with OpenAI gpt-oss, DeepSeek-R1, Gemma 3 and other models.

搭建LobeChat

参考文档:完全免费,离线可用!用LobeChat+Ollama搭建本地大模型-我不是咕咕鸽

services:
  lobe-chat:
    image: lobehub/lobe-chat
    container_name: lobe-chat
    restart: always
    ports:
      - '11432:3210'
    environment:
      ACCESS_CODE: lobe66
      OLLAMA_PROXY_URL: http://host.docker.internal:11434/v1

Lobechat配置
先在浏览器输入:http://127.0.0.1:11434

确保ollama在运行中。

再浏览器输入:http://127.0.0.1:11432

点击左上角小人头像:

语言设置这边,把llama3 8B选上:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注