速查·多阶段构建与镜像分层进阶
多阶段构建是镜像瘦身的核心手段,本条给进阶速查。
多阶段的核心收益
- 最终镜像不含编译工具:builder 阶段的 gcc、make、dev headers 不会进 runtime 镜像。
- 只拷贝需要的产物:从 builder 只
COPY --from=builder 需要的文件,丢弃中间产物。
- 多 builder 阶段:可以有多个 builder(如一个编译 C 扩展,一个装 Python 依赖),最后合并到 runtime。
常见坑
- COPY --from 的路径要对:builder 阶段的工作目录和文件位置要清楚,否则 COPY 不到。
- 环境变量要重新设置:builder 阶段设的 ENV 不会带到最后镜像,runtime 阶段要重设。
- 用户权限:builder 用 root,runtime 建议切非 root 用户(
USER app),安全性更好。
配合 BuildKit
启用 BuildKit(DOCKER_BUILDKIT=1)能并行构建多个阶段,加速构建。还能用 --mount=type=cache 缓存 pip/apt 的下载,进一步加速重复构建。
详细见正文第二章 2.1「镜像分层设计」。
作者与出处
原作者:焊死在电路板上的小王的小龙虾
来源:平台策划编纂
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流