AI开发环境配置太麻烦?一个Docker Compose模板搞定
每次开新AI项目,环境配置就要折腾半天。Python版本、Redis、向量数据库、API密钥管理,一个个装过来手都酸了。如果你也在重复做这件事,这个模板能帮你省掉大部分准备工作。
本文给出一个可直接用的Docker Compose配置,把AI应用开发常用的几个服务打包好。复制粘贴改改参数就能跑,不用从头研究每个组件怎么配。
模板包含什么
这套配置包含四个核心服务:
- Python应用:基于3.12-alpine镜像,轻量够用
- Redis:缓存和会话管理,AI应用里经常要用到
- Qdrant:开源向量数据库,做语义搜索和RAG都行
- Nginx:反向代理,本地开发时统一入口
为什么选Qdrant不选其他向量数据库?据Qdrant官方文档(qdrant.tech/documentation),它用Rust写的,内存占用比Python实现的方案低不少,单节点能扛百万级向量。对于个人开发和小规模产品来说够用了。等规模上去了再换Pinecone或Weaviate也不迟。
完整docker-compose.yml
version: "3.9"
services:
app:
build: .
ports:
- "8000:8000"
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
- QDRANT_HOST=qdrant
- QDRANT_PORT=6333
- OPENAI_API_KEY=${OPENAI_API_KEY}
depends_on:
- redis
- qdrant
volumes:
- ./src:/app/src
restart: unless-stopped
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
restart: unless-stopped
qdrant:
image: qdrant/qdrant:latest
ports:
- "6333:6333"
- "6334:6334"
volumes:
- qdrant_data:/qdrant/storage
restart: unless-stopped
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
restart: unless-stopped
volumes:
redis_data:
qdrant_data:
配套Dockerfile
FROM python:3.12-alpine
WORKDIR /app
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY src/ ./src/
EXPOSE 8000
CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000"]
requirements.txt参考
fastapi==0.115.0
uvicorn==0.30.0
redis==5.0.0
qdrant-client==1.11.0
openai==1.51.0
python-dotenv==1.0.1
怎么用
第一步:创建项目结构
my-ai-app/
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
├── nginx.conf
├── .env
└── src/
└── main.py
第二步:写.env文件
OPENAI_API_KEY=sk-your-key-here
第三步:启动
docker compose up -d
就这么简单。四个服务全部启动,Python应用跑在8000端口,通过Nginx在80端口统一访问。Qdrant的管理界面在6333端口,浏览器直接打开就能看到。
几个实用配置说明
热重载:开发时在Dockerfile的CMD后面加--reload参数,代码改了自动重启。不用每次手动docker restart。
资源限制:Qdrant默认会吃不少内存。如果本地机器配置有限,在docker-compose.yml里加deploy.resources.limits.memory: 512m限制一下。
数据持久化:redis_data和qdrant_data两个volume保证容器删了数据还在。换了电脑就另说了。
Nginx配置:最简单的反向代理,把80端口转发到app的8000端口。生产环境记得加HTTPS和限流。
为什么不直接用云服务
开发阶段用本地Docker有几个好处。一是快,启动一个完整环境只要几十秒。二是省钱,Upstash Redis和Qdrant Cloud免费额度有限,开发时频繁调用很容易超。三是数据在本地,调试方便。
据Docker官方文档(docs.docker.com/compose),Docker Compose的核心理念就是用单个YAML文件定义多容器应用。这意味着你的环境配置本身就是可版本控制的代码,换台电脑拉下来就能跑。
等到要部署上线,把同样的compose文件改改镜像tag和环境变量,推到服务器上docker compose up -d就完事。不需要重新研究每个服务怎么配。
进阶改造方向
这个模板可以往几个方向扩展:
- 加PostgreSQL替换Redis做主数据库,Redis只做缓存
- 加Celery做异步任务队列,处理耗时的AI推理
- 加Prometheus + Grafana做监控,盯住API响应时间和资源占用
- 把Qdrant换成Milvus,如果向量规模到千万级
模板本身保持精简,需要什么往上加。别一开始就搞个十几个服务的大编排,维护成本会吃掉你。
踩过的坑
Alpine镜像用pip装某些包会报错,因为缺少编译依赖。如果遇到这个问题,换成python:3.12-slim镜像就行,体积大一点但兼容性好很多。
Qdrant的gRPC端口是6334,REST端口是6333。Python客户端默认用gRPC,如果网络环境不支持记得切REST模式。
docker compose volumes在不同操作系统下路径处理不一样。Windows上用Docker Desktop可能有权限问题,Linux和macOS基本不用管。
总结
这套模板的核心思路是:用一个文件定义整个开发环境,复制粘贴就能用。省下来的时间花在写业务逻辑上,别浪费在装环境上。
如果你也在找一个AI项目的起步配置,拿这个模板改改就能开始。等业务跑起来有具体需求了,再针对性优化。
