我用 Docker 部署了一套完整的 AI 应用:从本地开发到云端上线,全流程踩坑记录

我用 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值