Docker BuildKit 缓存怎么用?让镜像构建更快也更稳定
BuildKit 已成为 Docker 构建的重要能力,合理使用缓存、上下文和多阶段构建,可以显著提升 CI/CD 镜像构建效率。
镜像构建慢,是很多 CI/CD 流水线的主要耗时来源。Docker BuildKit 提供了更好的并发、缓存和构建能力,但如果 Dockerfile 写法不合理,BuildKit 也救不了构建效率。
构建优化的核心不是“多加缓存”,而是让缓存命中更稳定。
Dockerfile 顺序很关键
依赖安装步骤应该尽量放在源代码复制之前。例如 Node 项目常见写法是先复制 package.json 和锁文件,安装依赖,再复制业务代码。这样业务代码变化不会导致依赖层缓存失效。
反过来,如果一开始就 COPY . .,任何文件变化都会让后续层重新构建。
控制构建上下文
.dockerignore 非常重要。不要把 node_modules、日志、测试报告、.git、临时文件和本地构建产物送进构建上下文。上下文越大,上传越慢,缓存也越容易被无关文件扰动。
使用缓存挂载
BuildKit 支持在构建阶段使用缓存挂载,例如缓存包管理器目录。这样可以减少重复下载依赖,但不会把缓存内容写进最终镜像层。
需要注意的是,缓存挂载适合构建加速,不等于依赖锁定。生产镜像仍然应该依赖锁文件和明确版本。
CI/CD 建议
在 GitLab CI 或其它流水线中,建议把镜像构建拆成可观测步骤:拉取基础镜像、安装依赖、构建应用、扫描镜像、推送仓库。构建慢时能快速定位瓶颈。
对于团队协作,还要统一基础镜像版本和构建参数,避免同一个服务在不同机器上构建出不一致镜像。
