术语图鉴/Docker 与容器/多阶段构建
切换Esc返回

多阶段构建 Multi-stage Build

你可能会说

容器多阶段构建有问题,帮我排查一下。

Dockerfile 里用多个 FROM 分阶段构建:第一阶段编译代码,第二阶段只复制编译产物。

Dockerfile 里用多个 FROM 分阶段构建:第一阶段编译代码,第二阶段只复制编译产物。最终镜像更小更安全。

也常被叫作Multi-stage Build

生活类比

像工厂流水线——第一车间生产零件,第二车间只组装成品,不把工具和废料带进成品包装。

🎮 动手试试

Build (1GB)
COPY --from
Final (50MB)
选择题选择一个你认为最合适的答案

关于「多阶段构建」,以下哪个描述最准确?

你可以这样告诉 AI

帮我把这个 Go 项目的 Dockerfile 改成多阶段构建,用 golang:1.22 编译,最终用 scratch 只跑二进制

容易混淆?这样区分

多阶段构建 Multi-stage Build
单阶段构建 Single-stage Build

多阶段构建用多个 FROM 分离编译与运行环境,最终镜像不含编译工具;单阶段构建只有一个 FROM,编译依赖残留在镜像中导致体积更大。

什么时候用

减小镜像体积

编译型语言如 Go、Java、前端项目需要编译器但最终镜像不应包含编译工具时,用多阶段构建分离编译和运行环境。

和 AI 协作时

想让 AI 帮你优化 Dockerfile 时,直接说「帮我把这个 Dockerfile 改成多阶段构建,第一阶段用 golang:1.22 编译,第二阶段用 alpine 只复制二进制」。

什么时候不用

解释型语言项目

Python、Node.js 等不需要编译的语言,多阶段构建的收益有限,直接单阶段更简单,除非需要分离构建依赖。

镜像体积不敏感

内网环境或本地开发对镜像大小无要求的场景,单阶段构建更直观易维护,多阶段反而增加 Dockerfile 复杂度。

组成结构 · Anatomy

1
核心概念Core

Dockerfile 里用多个 FROM 分阶段构建:第一阶段编译代码,第二阶段只复制编译产物。最终

2
实际表现In Practice

像工厂流水线——第一车间生产零件,第二车间只组装成品,不把工具和废料带进成品包装。

3
与 AI 的关联AI Context

和 AI 沟通时提到「用多阶段构建减小镜像体积」,就是编译环境和运行环境分开,最终镜像只包含运行所需

典型使用场景

多阶段构建优化
告诉 AI「帮我把这个前端 Dockerfile 改成多阶段,第一阶段 npm build,第二阶段用 nginx 只托管 dist」
想弄懂概念时
告诉 AI「用大白话给我解释什么是多阶段构建,举个生活中的例子」

延伸阅读