我用 Docker 部署了一套完整的 AI 应用:从本地开发到云端上线,全流程踩坑记录
适合想把本地 AI 项目部署到线上、但被 Docker/部署流程搞晕的开发者。
本文从 Dockerfile 编写到 docker-compose 编排到云端部署,附完整的踩坑记录。
背景:本地跑得好好的,部署就炸
很多人有这个经历:本地开发环境一切正常,一部署到服务器就各种报错。
“在我电脑上能跑啊”——这是部署环节最经典的问题。
Docker 解决的就是这个问题:把你的代码、依赖、配置打包成一个标准化的容器,在任何环境都能跑。
阶段 1:编写 Dockerfile
Python 应用的 Dockerfile
# 基础镜像(用 slim 版减小体积)
FROM python:3.12-slim
# 设置工作目录
WORKDIR /app
# 先复制依赖文件(利用 Docker 缓存层)
COPY requirements.txt .
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 复制项目代码
COPY . .
# 暴露端口
EXPOSE 8000
# 启动命令
CMD ["python", "app.py"]
多阶段构建(减小镜像体积)
# 阶段 1:构建
FROM python:3.12 as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
# 阶段 2:运行(只复制必要的文件)
FROM python:3.12-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
EXPOSE 8000
CMD ["python", "app.py"]
效果:镜像从 1.2GB 减小到 300MB。
阶段 2:docker-compose 编排
一个 AI 应用通常需要多个服务(前端 + 后端 + 数据库 + 模型服务)。
version: '3.8'
services:
# 后端 API
backend:
build: ./backend
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
- MODEL_URL=http://model:11434
depends_on:
db:
condition: service_healthy
model:
condition: service_started
restart: unless-stopped
# 前端
frontend:
build: ./frontend
ports:
- "80:80"
depends_on:
- backend
restart: unless


615

被折叠的 条评论
为什么被折叠?



