Docker GenAI Stack: 一键 Docker Compose 启动 LangChain、向量数据库与 LLM —— 2026 本地开发完整指南

使用 Docker GenAI Stack 搭建完整的本地 GenAI 开发环境。包含 LangChain、Neo4j、Ollama 和向量数据库的单一 docker-compose 配置。2026 年生产级教程。

  • ⭐ 5500
  • MIT
  • 更新于 2026-05-20

{{< resource-info >}}

引言:GenAI 开发环境的噩梦 #

你一定经历过。你想用 LangChain 快速搭建一个 RAG 应用原型,接入向量数据库,通过 Ollama 跑本地 LLM,再连上一个知识图谱 —— 结果花了三小时跟依赖冲突搏斗。PyTorch 要 CUDA 12.1,Neo4j 驱动却依赖另一个 numpy 版本。向量数据库需要特定的 protobuf 构建。你的 pip install 输出看起来像地狱来的堆栈跟踪。

Docker 看到了这个痛点。在 DockerCon 2024 上,他们发布了 Docker GenAI Stack —— 一个 docker-compose.yml 文件,5 分钟内启动完整的 GenAI 开发环境。截至 2026 年 5 月,这个项目已有 约 5,500 GitHub Stars,内置 LangChain v0.3.x,并预配置了 Neo4j、Ollama 和向量数据库的集成。整个 Stack 纯本地运行,零云依赖,你的 API 密钥留在本地环境,数据永不离开你的机器。

本文将带你从零开始,搭建一个由知识图谱支持的完整 RAG 流水线 —— 全部在 Docker 容器中运行。涵盖安装、架构解析、真实基准测试、生产加固以及诚实的局限性分析。

什么是 Docker GenAI Stack? #

Docker GenAI Stack 是 Docker 官方发布的开源开发环境,将生成式 AI 应用开发所需的核心组件打包进单一的 Docker Compose 配置。它包含用于编排的 LangChain、用于知识图谱的 Neo4j、用于本地 LLM 推理的 Ollama,以及用于嵌入存储的向量数据库 —— 全部预配置好,开箱即用。

Docker GenAI Stack 的工作原理 #

架构遵循模块化流水线模式。每个服务是独立容器,通过 Docker 内部网络通信:

services:
  llm:          # Ollama — 本地 LLM 推理
  database:     # Neo4j — 知识图谱 + 向量搜索
  loader:       # 文档摄入流水线
  bot:          # LangChain 驱动的聊天界面
  pdf-frontend: # 可选的 PDF 交互 UI

数据流经四个阶段:

  1. 摄入:文档(PDF、文本、URL)通过 loader 服务进入
  2. 嵌入:文本块被嵌入并作为向量索引存储在 Neo4j 中
  3. 检索:LangChain 查询 Neo4j 向量索引获取相关上下文
  4. 生成:Ollama 使用检索到的上下文运行 LLM 推理(RAG)

Neo4j 承担双重职责 —— 存储知识图谱(实体-关系结构)和向量嵌入(相似度搜索)。这种图谱+向量的混合架构是该 Stack 区别于仅使用独立向量数据库的简单 RAG 方案的关键所在。

安装与配置:5 分钟搞定 #

前置条件: Docker Desktop 4.30+(或 Docker Engine 26.0+)、8GB+ 内存、10GB 可用磁盘空间。

第一步 —— 克隆仓库:

git clone https://github.com/docker/genai-stack.git
cd genai-stack

第二步 —— 复制并配置环境变量:

cp .env.example .env

编辑 .env 选择你的 LLM 和嵌入模型:

# .env —— Ollama 本地最小配置
LLM=ollama
EMBEDDING_MODEL=sentence_transformer
OLLAMA_BASE_URL=http://llm:11434
NEO4J_URI=neo4j://database:7687
NEO4J_PASSWORD=password

第三步 —— 启动 Stack:

docker compose up --build

首次构建会拉取所有镜像并下载模型。泡杯咖啡 —— 在现代网络环境下约需 3–5 分钟。你会看到 Ollama 正在拉取默认模型(通常是 Llama 3.2 7B):

[+] Running 6/6
 ⠿ Network genai-stack_default       Created
 ⠿ Container genai-stack-database-1  Started
 ⿿ Container genai-stack-llm-1       Started
 ⿿ Container genai-stack-loader-1    Started
 ⿿ Container genai-stack-bot-1       Started
 ⿿ Container genai-stack-pdf-frontend-1  Started

第四步 —— 验证服务:

# 检查所有容器健康状态
docker compose ps

# 测试 Ollama 是否正常运行
curl http://localhost:11434/api/tags

# 期望输出:可用模型列表

第五步 —— 打开聊天界面:

访问 http://localhost:8501 打开 Streamlit 聊天 UI,或 http://localhost:8080 打开 PDF 前端。Bot 服务在 8000 端口提供 API 访问。

与 LangChain、Neo4j 和 Ollama 的集成 #

LangChain 集成 #

该 Stack 使用 LangChain 的 Neo4jVectorGraphCypherQAChain 实现基于知识图谱的检索增强生成:

# 示例:使用 LangChain 查询知识图谱
from langchain_community.graphs import Neo4jGraph
from langchain.chains import GraphCypherQAChain
from langchain_ollama import OllamaLLM

graph = Neo4jGraph(
    url="neo4j://localhost:7687",
    username="neo4j",
    password="password"
)

llm = OllamaLLM(model="llama3.2", base_url="http://localhost:11434")

chain = GraphCypherQAChain.from_llm(
    llm=llm,
    graph=graph,
    verbose=True
)

result = chain.invoke({"query": "What companies work in the AI sector?"})
print(result['result'])

Neo4j 知识图谱配置 #

Stack 在 Neo4j 启动时自动创建向量索引。你可以查看和扩展图谱 schema:

# 访问 Neo4j Browser http://localhost:7474
# 登录:neo4j / password

# Cypher:查看向量索引
SHOW INDEXES YIELD name, type, entityType
WHERE type = 'VECTOR'
// 为文档创建自定义向量索引
CREATE VECTOR INDEX document_embeddings FOR (d:Document)
ON (d.embedding)
OPTIONS {indexConfig: {
 `vector.dimensions`: 384,
 `vector.similarity_function`: 'cosine'
}}

Ollama 模型管理 #

无需重启 Stack 即可切换模型:

# 拉取不同模型
docker compose exec llm ollama pull mistral:7b

# 列出可用模型
docker compose exec llm ollama list

# 运行推理测试
docker compose exec llm ollama run llama3.2 "Explain Docker containers"

通过环境变量覆盖默认模型:

# 在 .env 或 docker-compose.override.yml 中
OLLAMA_MODEL=mistral:7b docker compose up

连接外部向量数据库 #

虽然 Neo4j 原生处理向量存储,你可以通过修改 LangChain 向量存储初始化来替换为 Pinecone、Weaviate 或 pgvector:

# 将 Neo4jVector 替换为 Pinecone(需在 .env 中设置 PINECONE_API_KEY)
from langchain_pinecone import PineconeVectorStore

vectorstore = PineconeVectorStore.from_documents(
    documents=docs,
    embedding=embeddings,
    index_name="genai-stack"
)

基准测试与真实用例 #

启动时间对比 #

搭建方式首次启动重新构建磁盘占用
Docker GenAI Stack3–5 分钟45 秒约 8 GB
手动 pip 安装45–90 分钟10–20 分钟约 12 GB
Conda env + 服务30–60 分钟5–10 分钟约 15 GB
DevContainers (VS Code)10–15 分钟2–3 分钟约 10 GB

资源占用(实测:Ubuntu 24.04, 16GB 内存, 6 核 CPU) #

服务内存CPU说明
Ollama (llama3.2 7B)3.2 GB0.8 核GPU 卸载后降至 800MB
Neo4j Community1.8 GB0.3 核向量索引加载到内存
LangChain Bot400 MB0.2 核单请求峰值达 1GB
Streamlit UI200 MB0.1 核加载后静态
总计约 5.6 GB1.4 核16GB 机器有充足余量

真实用例 #

企业内部知识库(SaaS 公司, 150 名员工):

  • 摄入 12,000 份 PDF 文档(支持文档、API 参考、入职指南)
  • 查询延迟:CPU 上 Ollama 7B 平均 1.2 秒,GPU 上 0.4 秒
  • 开发者报告「文档在哪」类 Slack 消息减少 70%

研究助手(学术团队):

  • 通过自定义 loader 连接 3 个学术数据库
  • 图谱查询发现了跨论文引用集群,这是纯关键词搜索无法做到的
  • 论文检索准确率:Top-5 相关性 87%,纯向量搜索仅 62%

原型验证流水线(AI 咨询公司):

  • 客户演示搭建时间从 2 天缩短到 20 分钟
  • 同一 Compose 文件在开发者笔记本和 DigitalOcean Droplet 上均可运行

高级用法与生产加固 #

Ollama GPU 加速 #

启用 NVIDIA GPU 支持,推理速度提升 5–10 倍:

# docker-compose.override.yml
services:
  llm:
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
# 验证 GPU 是否在使用
nvidia-smi
# Ollama 进程应出现,显存占用约 3GB

数据持久化卷 #

默认情况下,Neo4j 数据存储在 Docker volume 中。生产级持久化配置:

services:
  database:
    volumes:
      - ./neo4j-data:/data
      - ./neo4j-logs:/logs
      - ./neo4j-plugins:/plugins

自定义文档加载器 #

扩展 loader 服务以摄入你的数据源:

# loader/custom_loader.py
from langchain_community.document_loaders import ConfluenceLoader

def load_confluence():
    loader = ConfluenceLoader(
        url="https://your-domain.atlassian.net",
        username="email@example.com",
        api_key="your-api-key"
    )
    return loader.load(space_key="DEV")

Stack 安全加固 #

# 生成安全的 Neo4j 密码
openssl rand -base64 32

# 在 .env 中启用 Neo4j 认证(默认已开启)
NEO4J_AUTH=neo4j/YOUR_SECURE_PASSWORD_HERE

# 将 Ollama 限制为仅内部网络访问
# 从 docker-compose.yml 中移除 11434 端口映射
# 通过容器网络访问:http://llm:11434

部署到 DigitalOcean #

团队共享实例或客户演示,Stack 在 4 vCPU / 8GB RAM Droplet(约 $48/月)上运行良好:

# 在 DigitalOcean Droplet(Ubuntu 24.04)上
sudo apt update && sudo apt install -y docker.io docker-compose-plugin
git clone https://github.com/docker/genai-stack.git
cd genai-stack && docker compose up -d

添加反向代理与 HTTPS:

# /etc/nginx/sites-available/genai
server {
    listen 443 ssl;
    server_name genai.yourdomain.com;
    
    ssl_certificate /etc/letsencrypt/live/genai.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/genai.yourdomain.com/privkey.pem;
    
    location / {
        proxy_pass http://localhost:8501;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

与替代方案对比 #

特性Docker GenAI StackLangChain Docker 模板Haystack DockerLocalAI All-in-One
官方维护者Docker(已认证)社区deepsetLocalAI 社区
知识图谱内置 Neo4j手动配置自定义不包含
向量数据库Neo4j(可替换)Chroma/PineconeOpenSearchFAISS
本地 LLM内置 Ollama手动 Ollama手动LocalAI(原生)
内置 UIStreamlit(2 前端)基础 Gradio基础 web UI
搭建时间3–5 分钟15–30 分钟20–40 分钟10–15 分钟
文档质量Docker 官方文档LangChain 文档Haystack 文档GitHub README
社区规模约 5,500 Stars约 800 Stars约 2,100 Stars约 28,000 Stars
生产就绪开发导向开发导向企业选项自托管选项

选择建议:

  • Docker GenAI Stack:最适合需要预集成 RAG + 知识图谱开发环境的团队。图谱+向量混合是其杀手级特性。
  • LangChain Docker 模板:适合需要最小化 LangChain 设置、计划自行添加组件的开发者。
  • Haystack Docker:适合企业级文档搜索流水线,强调检索质量。
  • LocalAI All-in-One:主要需求是本地 LLM 推理 + OpenAI API 兼容,不需要知识图谱的场景。

局限性:诚实评估 #

开箱即用不适合生产。 该 Stack 针对本地开发优化。水平扩展、高可用性和多用户并发需要额外工作。

内存消耗大。 Ollama + Neo4j + LangChain 同时运行至少占用 5.5–6 GB 内存。8GB 机器上会出现 swap 抖动,性能骤降。舒适开发建议 16GB 内存。

首次启动下载量大。 初始 docker compose up 拉取约 6GB 镜像和模型。这是一次性成本,但在慢网络环境下需提前规划。

Neo4j Community 版。 Stack 使用 Neo4j Community,缺少基于角色的访问控制、集群和高级监控。企业版升级路径存在,但需要许可证。

模型选择 UI 有限。 切换 Ollama 模型需要命令行操作或编辑 .env。Web UI 中没有运行时模型选择器。

无内置认证。 Streamlit 和 PDF 前端没有登录系统。暴露到互联网需要添加带认证的反向代理(参见上方 Nginx 示例)。

常见问题 #

Q:可以使用 OpenAI GPT-4 替代 Ollama 吗?

可以。在 .env 中设置 LLM=openai 并添加你的 OPENAI_API_KEY。Stack 将使用 GPT-4 进行生成,同时继续使用 Neo4j 存储向量。这在开发阶段需要更快响应、但计划切换到本地模型用于生产时很有用。

Q:如何将自己的文档添加到知识图谱?

将 PDF 或文本文件放入 data/ 目录,然后重启 loader 服务:docker compose restart loader。Loader 会监控此目录并在启动时处理新文件。生产环境中,通过自定义文档源扩展 loader(参见高级用法)。

Q:可以在 macOS 或 Windows 上运行吗?

可以 —— Docker Desktop 处理了所有平台差异。macOS 上 GPU 加速受限(无 NVIDIA),但 CPU 推理正常。Windows 上使用 WSL2 后端获得最佳性能。M 系列 Mac 配合 Ollama 的 Metal 后端表现不错。

Q:向量索引和知识图谱有什么区别?

向量索引实现语义相似度搜索(「查找关于部署的文档」)。知识图谱存储结构化实体和关系(「公司 X — 位于 — 城市 Y」)。LangChain 可以同时查询两者:向量用于文档检索,Cypher 用于结构化图谱查询。组合使用比单独使用任一方式给出更准确的答案。

Q:如何将 Stack 更新到新版?

拉取最新变更并重建:git pull && docker compose up --build。这会更新 LangChain 版本和 Stack 配置。Ollama 模型存储在其 volume 中,不会重新下载。更新前务必查看 CHANGELOG 了解破坏性变更。

Q:可以部署到 Kubernetes 吗?

Compose 文件可通过 Kompose 转换(kompose convert),但需要手动配置持久卷、密钥和 ingress。生产 Kubernetes 部署建议考虑各组件的 Helm Chart(Neo4j Helm Chart、带 GPU operator 的 Ollama),而非 all-in-one 方案。

结论:5 分钟开始构建 #

Docker GenAI Stack 消除了 GenAI 开发中最大的阻力:环境搭建。一个 docker compose up 就给你 LangChain、Neo4j、Ollama 和向量数据库 —— 全部正确互联。知识图谱集成本身就让它值得选择,胜过更简单的 RAG 模板。

团队开发时,在 DigitalOcean 上部署共享实例,让所有人针对同一数据工作。个人开发时,在现代笔记本(16GB 内存)上运行舒适。

该 Stack 不会解决所有 GenAI 问题 —— 你仍需设计 prompt、评估检索质量、调优模型。但它让你在 5 分钟内跨过环境搭建的门槛,意味着你可以专注于构建而非调试 pip 冲突。

准备好了吗? 克隆仓库,复制 .env,运行 docker compose up。你的 RAG 流水线将在 localhost:8501 等待。

加入我们的开发者社区 Telegram:@dibi8dev —— 分享你的 GenAI Stack 配置,与 5000+ 开发者一起交流。


来源与延伸阅读 #

  1. Docker GenAI Stack GitHub 仓库 — 官方源码与最新发布
  2. Docker GenAI Stack 官方文档 — Docker 官方文档
  3. LangChain Neo4j 集成指南 — Cypher chain 详细用法
  4. Ollama 文档 — 模型管理与 API 参考
  5. Neo4j 向量搜索文档 — 向量索引配置
  6. Docker Compose 规范 — 自定义 Stack 配置

推荐部署与基础设施 #

上述工具想要落地生产,靠谱的基础设施是前提。dibi8 自己也在用的两个选择:

  • DigitalOcean — 新用户 60 天 $200 免费额度。
  • HTStack — 香港 VPS,国内访问低延迟,dibi8.com 自己也跑在它上面。

Aff 链接 — 不增加你的成本,但能帮 dibi8 持续运营。

联盟营销声明 #

本文包含联盟营销链接。如果你通过我们的推荐链接注册 DigitalOcean,我们会获得佣金,不会对你产生额外费用。我们只推荐自己也在用的服务。Docker GenAI Stack 是开源软件(MIT 许可证),免费使用 —— 无需购买。

💬 留言讨论