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

AI开发环境配置太麻烦?一个Docker Compose模板搞定

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

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项目的起步配置,拿这个模板改改就能开始。等业务跑起来有具体需求了,再针对性优化。

喜欢 (0)赏
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。