【问题标题】:How do you extract/reuse Docker BuildKit caches with CI如何使用 CI 提取/重用 Docker BuildKit 缓存
【发布时间】:2021-05-17 08:44:48
【问题描述】:
Docker 引入了RUN --mount=type=cache,我可以在本地很好地工作,但我希望能够在 CI 特别是 Azure Devops 中利用它。
但我找不到 save 和 load 构建之间的缓存方式。有没有办法做到这一点?
【问题讨论】:
-
如果答案能给你一些帮助,请随时告诉我。只是提醒this。谢谢。
标签:
docker
azure-devops
continuous-integration
docker-buildkit
【解决方案1】:
请参考this doc:
在 Microsoft 托管代理的当前设计中,每个作业都被分派到新配置的虚拟机(基于从 azure-pipelines-image-generation 存储库模板生成的映像)。这些虚拟机在作业完成后被清理,不会持久化,因此不能重复用于后续作业。虚拟机的短暂性阻止了缓存 Docker 层的重用。
因此,当您使用 Microsoft 托管代理时,VM 上的本地 docker 缓存不能被其他构建使用。
这里有一些替代方法:
-
您可以使用self-hosted agent 来执行 docker 构建过程。多个构建可以共享本地缓存。
-
您也可以使用Cache task 和docker save/load commonds 将保存的 docker 层上传到 azure devops 服务器并在以后运行时恢复。
-
使用 docker pull 从远程仓库拉取镜像。使用 --cache-from 来指向图像。您可以将构建映像推送到远程存储库以进行下一次构建。
您可以参考this blog 和this ticket 了解更多详细信息。