结论:核心思路是选更小的基础镜像、用多阶段构建剥离编译产物、减少层数与残留文件、用 .dockerignore 缩小构建上下文。

展开:具体手段:1)基础镜像优先选 alpine(约 5MB)或 distroless,注意 alpine 用 musl libc,某些依赖 glibc 的程序(如部分 Python 科学计算库)会有兼容问题,此时可选 slim 变体。2)多阶段构建:编译型语言(Go/Java)在 builder 阶段编译,最终镜像只 COPY 二进制,Go 常配合 FROM scratch 做到十几 MB。3)合并 RUN 指令并同层清理:apt-get update && apt-get install -y xxx && rm -rf /var/lib/apt/lists/*。4).dockerignore 排除 .git、node_modules、本地构建产物,既减小上下文传输又避免缓存失效。5)不要以 root 运行,加 USER 指令提升安全性。追问方向:如何分析镜像体积?可答 docker history 查看各层大小,或用 dive 工具逐层剖析。易错点:COPY 整个目录再删除无用文件并不会减小镜像,删除发生在新层,旧层文件仍然存在。