内容: [Intro Guide to Dockerfile Best Practices]
本文涉及以下几方面:
- 构建时间 (Build Time)
- 镜像大小 (Image size)
- 可维护性(Maintainability)
- 可再现性 (Reproducibility)
构建时间
在一次发布过程中, 镜像可能会经过多次重建(rebuild), 最后发布(release). docker 镜像在构建过程中,会保留缓存(cache), 在重建的过程中可以降低构建时间.
所以, 提高 cache 的利用率, 可以提升发布效率.
变化会引起缓存的失效, 在 Dockerfile 中, 只要一条执行命令发生变化, 就会引起其后所有的执行缓存失效.
所以, 提供缓存的利用率, 可以如下入手:
- 降低引起变化的可能行
- 降低发生变化后的影响
1.调整命令的
- 降低发生变化后的影响
2.COPY 项目更加具体
- 降低引起变化的可能行
3.合并构建单元
- 降低引起变化的可能行
镜像大小
1.移除不必要的依赖
- debug 工具可以 container 中安装
2.删除包管理工具缓存
- 只有在同一条 RUN 命令中移除才会真正的生效.
可维护性
1.优先使用官方镜像
2.指定镜像标签
- 默认 latest 标签极大可能会导致项目构建失败.
3.选择最小的版本
可再现性
1.从源码构建
- 防止因为构建环境不一致导致发布失败
2.分离获取依赖步骤
3.多阶构建
- 多阶构建可以有效降低镜像的大小