• 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

Docker Compose 本地 LLM 开发环境模板:Ollama + Open WebUI + Qdrant 一键部署

可复用技术资产 admin 2小时前 9次浏览 已收录 扫描二维码

这套环境包含什么

调 API 做原型很爽,但到了正经开发阶段,你会碰到一堆只在本地才暴露的问题:向量数据库跟 embedding 模型的维度对不上、OpenAI 兼容接口的 streaming 行为跟本地推理不一样、RAG 管线在云端跑通但本地调试不了。

这些问题不需要你买 GPU 服务器解决。一台普通开发机,装好 Docker,用下面这份 docker-compose.yml 就能跑起一整套本地 LLM 开发环境:模型推理、Web 界面、向量数据库、embedding 服务,全部容器化,一条命令启动。

四个容器各司其职

Ollama — 本地模型推理引擎。官方 Docker 镜像支持 CPU 和 Nvidia GPU,暴露 11434 端口提供 OpenAI 兼容的 REST API。你能跑 Llama 3.2、Qwen 2.5、DeepSeek-R1 等几十个开源模型,不花一分钱 API 费用。

Open WebUI — 前端界面。支持多模型切换、文件上传、RAG 检索、代码执行。它的 API 兼容 OpenAI 格式,意味着你本地开发的代码以后切到云端 API 几乎不用改。GitHub 上 80k+ star,社区活跃。

Qdrant — 向量数据库。做 RAG 必须有向量存储。Qdrant 开源、支持 Docker 部署、性能在主流向量数据库里排前列。比 ChromaDB 更适合生产环境,比 Milvus 部署简单得多。

Qdrant Web UI — 向量数据库的可视化管理界面,方便你检查 collection 状态、调试向量检索结果。

完整 docker-compose.yml

直接复制使用。CPU 和 GPU 两套配置都给了。

version: "3.8"

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    restart: unless-stopped
    # Nvidia GPU 模式:取消注释 deploy 配置
    # deploy:
    #   resources:
    #     reservations:
    #       devices:
    #         - driver: nvidia
    #           count: all
    #           capabilities: [gpu]

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports:
      - "3000:8080"
    volumes:
      - open-webui_data:/app/backend/data
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - QDRANT_URL=http://qdrant:6333
    depends_on:
      - ollama
      - qdrant
    restart: unless-stopped

  qdrant:
    image: qdrant/qdrant:latest
    container_name: qdrant
    ports:
      - "6333:6333"
      - "6334:6334"
    volumes:
      - qdrant_data:/qdrant/storage
    restart: unless-stopped

  qdrant-ui:
    image: qdrant/qdrant-web-ui:latest
    container_name: qdrant-ui
    ports:
      - "8001:8001"
    depends_on:
      - qdrant
    restart: unless-stopped

volumes:
  ollama_data:
  open-webui_data:
  qdrant_data:

保存为 docker-compose.yml,然后执行 docker compose up -d。四个容器全部启动。打开 http://localhost:3000 就是 Open WebUI 界面,http://localhost:8001 是 Qdrant 管理面板。

启动后要做的三件事

第一件:拉模型。 Ollama 默认不预装模型,需要手动拉。进入容器执行:

docker exec -it ollama ollama pull llama3.2

根据你的显存选模型。8GB 显存跑 Llama 3.2 3B 没压力,16GB 可以上 8B。纯 CPU 模式建议用 1B 版本,能跑但慢。Ollama 官方库有几十个模型可选,包括 Qwen 2.5 Coder 这种专门优化过代码生成的。

第二件:在 Open WebUI 里关联模型。 第一次打开 WebUI 注册管理员账号后,进 Settings → Models,确认 Ollama 连接已自动建立。你应该能看到刚拉的模型出现在列表里。如果没出现,检查 Ollama 容器是否正常:docker logs ollama。

第三件:配置 Qdrant 做 RAG。 Open WebUI 原生支持 Qdrant 做知识库检索。进 Settings → Documents,把向量数据库选成 Qdrant,填入 http://qdrant:6333(容器间用服务名通信)。然后上传文档,Open WebUI 会自动调 Ollama 的 embedding 模型生成向量存进 Qdrant。聊天时勾选文档,就实现了 RAG。

GPU 配置的注意事项

如果你有 Nvidia 显卡,用 GPU 模式推理速度快 10 倍以上。但需要先装 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://#g' \
  | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

装完之后把 docker-compose.yml 里 Ollama 的 GPU 配置取消注释就行。验证 GPU 是否生效:docker exec -it ollama ollama ps。如果看到模型加载到了 GPU 上,说明配置成功。

开发场景:怎么用这套环境

这套环境不只是”能聊天”。几个实际开发场景:

场景一:RAG 管线调试。 上传文档到 Open WebUI 知识库,聊天时引用。如果检索效果不好,去 Qdrant UI 查看向量数据,检查 chunk 大小、embedding 维度是否匹配。这比在云上调 RAG 快得多,不用等网络往返。

场景二:API 兼容性测试。 Ollama 的 REST API 跟 OpenAI 格式兼容。你的代码先指向 http://localhost:11434/v1 调试,通过后改个 base URL 切到生产 API。注意 streaming 行为可能略有差异,本地测过比线上发现 bug 好。

场景三:Prompt 工程。 Open WebUI 支持创建自定义模型预设——系统提示词、温度参数、知识库绑定都配好。你可以为不同任务建不同预设,快速对比效果。比在代码里改 prompt 字符串方便太多。

资源消耗参考

CPU 模式下,四个容器占大约 2GB 内存(不含模型加载)。Llama 3.2 3B 加载后多占 2-3GB。一台 16GB 内存的开发机跑得起来,不流畅但能用。

GPU 模式下,3B 模型占 2-3GB 显存,8B 占 5-6GB。一张 8GB 显存的卡够日常开发用了。

磁盘方面,模型文件是大头。Llama 3.2 3B 约 2GB,8B 约 5GB。Qdrant 和 Open WebUI 的数据通常在几百 MB 级别。建议预留 20GB 磁盘空间。

进阶配置建议

加一个 embedding 专用模型。Ollama 支持 nomic-embed-text 这类轻量 embedding 模型,跟推理模型分开跑,互不影响。

加 SearXNG 做联网搜索。Open WebUI 支持集成 SearXNG,让本地 LLM 能搜实时网页。再加一个 searxng 容器到 compose 文件里就行。

加流量监控。用 cAdvisor 或 Portainer 监控各容器资源占用,方便你调优。


数据来源:

  • Ollama 官方 Docker Hub 文档(hub.docker.com/r/ollama/ollama):CPU/GPU/AMD GPU 部署命令、模型拉取方式
  • Open WebUI 官方文档(docs.openwebui.com):功能列表、环境变量配置、知识库与 RAG 功能、Qdrant 集成
  • Ollama 模型库(ollama.com/library):可用模型列表与参数规模,包括 Llama 3.2、Qwen 2.5、DeepSeek-R1、nomic-embed-text
  • Qdrant 官方文档(qdrant.tech/documentation/):Docker 部署、端口配置、存储卷映射
喜欢 (0)赏
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。