Docker 多阶段构建:把 Python 应用镜像从 1GB 瘦到 100MB

举报
yd_275955218 发表于 2026/11/09 12:36:08 2026/11/09
【摘要】 Docker 多阶段构建:把 Python 应用镜像从 1GB 瘦到 100MB 为什么镜像会越来越大很多同学的 Python 镜像动辄 1GB 以上:基础镜像带了完整编译工具链,pip 安装时又留下缓存和构建依赖。镜像大不仅推送慢、拉取慢,还扩大了攻击面。Docker 的多阶段构建(multi-stage build)正是为解决这个问题而生。 核心思路多阶段构建允许在一个 Dockerf...

Docker 多阶段构建:把 Python 应用镜像从 1GB 瘦到 100MB

为什么镜像会越来越大

很多同学的 Python 镜像动辄 1GB 以上:基础镜像带了完整编译工具链,pip 安装时又留下缓存和构建依赖。镜像大不仅推送慢、拉取慢,还扩大了攻击面。Docker 的多阶段构建(multi-stage build)正是为解决这个问题而生。

核心思路

多阶段构建允许在一个 Dockerfile 里定义多个 FROM 阶段:前面的阶段负责编译与安装,最后一个阶段只拷贝运行必需的产物。构建工具、源码、缓存都留在中间阶段,不会进入最终镜像。

一个可运行的例子

# 阶段一:安装依赖到独立目录
FROM python:3.12 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --prefix=/install -r requirements.txt

# 阶段二:只带运行时
FROM python:3.12-slim
WORKDIR /app
COPY --from=builder /install /usr/local
COPY . .
CMD ["python", "main.py"]

第一阶段用完整镜像编译安装依赖到 /install;第二阶段用 slim 镜像,仅拷贝 /install 和业务代码。gcc、pip 缓存等都不会出现在最终镜像里。

进一步瘦身的三个习惯

  1. 选 slim 基础镜像,注意 alpine 的 musl 与部分 wheel 不兼容;
  2. 合并 RUN 指令并在同一层清理缓存(rm -rf /var/lib/apt/lists/*);
  3. 用 .dockerignore 排除 .git、测试与文档,避免无关文件进入上下文。

小结

多阶段构建把构建环境和运行环境分离,是镜像瘦身最直接有效的手段。配合 slim 基础镜像与良好的分层习惯,把一个 1GB 的 Python 镜像压到 100MB 以内并不难。建议在 CI 里加一步镜像体积检查,防止体积回弹。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。