精简 Docker 镜像:基础镜像选择与多阶段构建的威力

主要观点:大多数部署的 Docker 镜像过大,本文介绍了优化 Docker 镜像的实践,包括选择更轻的“slim”基础镜像和多阶段构建技术。
关键信息:

  • “slim”基础镜像能减少 880MB 且缩短 5 秒构建时间,如python:3.10-slim相比全量镜像,但可能缺少编译所需工具。
  • 对于slim镜像中需要编译的组件,如dummy_c_extension,需临时安装编译工具,虽能解决但较繁琐。
  • 多阶段构建可分离编译和运行阶段,如multistage_image项目,先在builder阶段编译,再在runtime阶段复制运行所需内容,最终得到 832MB 且 23 秒构建的最小镜像。
    重要细节:
  • 展示了slim_image项目的Dockerfile及构建结果,如bert-classifier-slim为 1.66GB 及 51 秒构建。
  • 给出了slim_image/Dockerfile.fixed的解决方案,临时安装编译工具后清理。
  • 详细说明了multistage_image项目的两个阶段,builder阶段使用全量 Python 镜像安装所有依赖,runtime阶段使用slim镜像只安装运行所需内容。
  • 强调运行dive bert-classifier-multistage可查看最终镜像细节,其最大层为安装运行时依赖的命令,总大小 832MB 效率高。
    结论:选择“slim”基础镜像在处理编译需求时通常是净收益,多阶段构建虽增加Dockerfile长度,但能带来清晰、健壮和大幅的尺寸节省,对于复杂的 AI 应用是必要的。
阅读 24
0 条评论