深入解析Docker GenAI Stack的容器化部署架构
2025-07-08 05:06:02作者:昌雅子Ethen
项目概述
Docker GenAI Stack是一个基于容器化技术的生成式AI应用堆栈,它整合了大型语言模型(LLM)、知识图谱数据库和多个AI服务组件,为开发者提供了一个开箱即用的AI应用开发环境。该项目通过Docker Compose编排多个服务,实现了从模型管理到应用前端的完整解决方案。
核心服务组件分析
1. 语言模型服务(LLM)
项目提供了两种LLM服务配置:
- 基础CPU版本:使用ollama/ollama镜像,适合没有GPU的环境
- GPU加速版本:通过NVIDIA设备预留实现GPU加速,显著提升模型推理速度
llm: &llm
image: ollama/ollama:latest
profiles: ["linux"]
llm-gpu:
<<: *llm
profiles: ["linux-gpu"]
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
2. 模型下载服务(pull-model)
这是一个定制服务,负责从Ollama服务器下载指定的语言模型:
- 默认下载llama2模型
- 可通过环境变量
LLM
指定其他模型 - 使用
OLLAMA_BASE_URL
配置模型服务器地址
3. 知识图谱数据库(database)
采用Neo4j 5.11作为知识存储后端:
- 默认启用APOC插件(Neo4j的扩展过程库)
- 提供健康检查机制确保服务可用性
- 数据持久化到本地
./data
目录 - 默认认证为neo4j/password,可通过环境变量覆盖
database:
image: neo4j:5.11
ports:
- 7687:7687 # Bolt协议端口
- 7474:7474 # HTTP管理端口
volumes:
- $PWD/data:/data
environment:
- NEO4J_AUTH=${NEO4J_USERNAME-neo4j}/${NEO4J_PASSWORD-password}
- NEO4J_PLUGINS=["apoc"]
功能服务组件
1. 数据加载服务(loader)
核心功能:
- 处理文档嵌入和知识图谱构建
- 支持多种嵌入模型(sentence_transformer等)
- 集成了LangChain的跟踪功能
- 提供两个服务端口(8081和8502)
开发特性:
- 支持代码热重载(忽略特定文件变更)
- 依赖数据库健康和模型下载完成
2. 对话机器人服务(bot)
特性:
- 基于LLM的对话接口
- 端口8501对外提供服务
- 同样支持开发时热重载
- 共享嵌入模型目录
3. PDF处理服务(pdf_bot)
专用于PDF文档处理的AI服务:
- 端口8503
- 支持PDF内容提取和分析
- 与知识图谱深度集成
4. API服务(api)
提供RESTful接口:
- 端口8504
- 包含健康检查机制
- 整合了所有AI功能的后端接口
5. 前端服务(front-end)
Web用户界面:
- 端口8505
- 开发模式下支持文件同步
- 自动重建package.json变更
- 依赖API服务健康状态
网络与部署架构
所有服务通过自定义的net
网络互联,确保容器间通信隔离。部署时需要注意:
-
服务启动顺序控制:
- 数据库必须健康
- 模型必须下载完成
- API健康后前端才会启动
-
资源配置:
- GPU版本需要NVIDIA驱动支持
- 各服务内存需求不同,生产环境可能需要调整
-
开发便利功能:
- 多服务支持代码热重载
- 前端开发时文件同步
环境变量配置
项目高度可配置,主要环境变量包括:
- 数据库相关:
NEO4J_URI
,NEO4J_USERNAME
,NEO4J_PASSWORD
- AI模型相关:
LLM
,EMBEDDING_MODEL
,OLLAMA_BASE_URL
- 第三方API:
OPENAI_API_KEY
,LANGCHAIN_API_KEY
- AWS集成:
AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
最佳实践建议
- GPU加速:如有NVIDIA GPU,优先使用llm-gpu服务
- 模型管理:通过pull-model服务预下载所需模型,避免运行时延迟
- 数据持久化:确保data目录有足够空间存储Neo4j数据
- 开发流程:利用x-develop配置提高开发效率
- 安全配置:生产环境务必修改默认密码和API密钥
这个Docker Compose配置展现了一个现代化的AI应用架构,将多种技术栈无缝集成,为生成式AI应用开发提供了完整的容器化解决方案。