# ======================================== # 多阶段构建:Python微服务 # ======================================== # -------------------- 阶段1: 构建阶段 -------------------- FROM python:3-slim AS builder # 设置工作目录 WORKDIR /app # 替换为阿里云镜像源(为将来可能的构建依赖做准备) RUN sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources \ && sed -i 's|http://security.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources # 复制依赖文件 COPY requirements-prod.txt . # 安装Python依赖到临时目录(使用预编译wheel,无需编译依赖) RUN pip install --no-cache-dir --user -r requirements-prod.txt # -------------------- 阶段2: 运行阶段 -------------------- FROM python:3-slim # 设置工作目录 WORKDIR /app # 替换为阿里云镜像源并安装运行时依赖 RUN sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources \ && sed -i 's|http://security.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources \ && apt-get update \ && apt-get install -y --no-install-recommends \ libgl1 \ libglib2.0-0 \ libgomp1 \ && rm -rf /var/lib/apt/lists/* # 从构建阶段复制Python包 COPY --from=builder /root/.local /root/.local # 复制应用代码 COPY . . # 设置Python路径 ENV PATH=/root/.local/bin:$PATH ENV PYTHONUNBUFFERED=1 # 暴露端口 EXPOSE 8000 # 健康检查 HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD python -c "import requests; requests.get('http://localhost:8000/api/health', timeout=5)" # 启动命令 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "2"]