为什么要减小 Docker 镜像大小?
- 安装不必要的软件包会增加攻击面,从而增加安全风险
- 镜像传输需要更多时间
- 部署大镜像需要更多时间
效率技巧
- 编写
FROM时选择合适的基础镜像,以减小镜像体积 - 复用镜像底层缓存,提高容器生成效率。生成容器时,Docker 会按照镜像的一层一层叠加文件系统,假如已经有别的容器生成过某一层,Docker 可以复用
- 使用多阶段构建,可以将构建环境和运行环境分隔开(最后阶段将基础镜像换成更小的,并
COPY把可执行文件和依赖拷贝进下一层,以减少镜像整体大小) - 减少镜像层数(每执行
FROM、RUN、COPY都会创建一个单独的层),例如,可以将多行 Shell 命令都放在同一个RUN中 - 配置 .dockerignore 文件来忽略不需要文件
- 使用 Docker Squash 压缩层数
优雅技巧
- 需要多行 Shell 命令时,把这些命令编写到 Shell 脚本文件中。在 Dockerfile 中编写
COPY把 Shell 脚本文件拷贝进镜像,再编写RUN执行