1. 背景
在产品开发中构建docker镜像,随着时间的推移,会变得越来越大,构建时间也越来越长。我的目标是构建时间不超过 5 分钟。
2. 遵循Dockerfile的最佳实践
我们首先确保Dockerfile文件遵循Docker官方的最佳实践,具体做法有:
- 尽量使用官方的基础镜像,Docker推荐使用Alpine的镜像。
- 使用多阶段构建
- 使用.dockerignore去除无关的文件
- 创建临时容器
- 不要安装不用的包
- 解耦应用程序
- 利用缓存构建镜像
- 拆分复杂的RUN命令为多行,并用 / 分割
更多详细的最佳实践可以参考官方文档:https://docs.docker.com/develop/develop-images/instructions/
我们在此基础上做了2个修改,极大的缩短了构建时间。
首先介绍下两个工具:Buildkit 与 Buildx
3. Buildkit 与 Buildx
3.1 Buildit
Buildit是一个改进过的用来取代传统的Docker构建器的工具,从Docker 23.0开始成为默认构建器。它包含以下一些功能:
- 改进的缓存能力
- 并行构建不同的层
- 基础镜像的懒加载
使用buildit的时候,会发现比docker build的输出更简洁。
Docker 23.0前的版本要使用bui