【问题标题】: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 中利用它。

但我找不到 saveload 构建之间的缓存方式。有没有办法做到这一点?

【问题讨论】:

  • 如果答案能给你一些帮助,请随时告诉我。只是提醒this。谢谢。

标签: docker azure-devops continuous-integration docker-buildkit


【解决方案1】:

请参考this doc:

在 Microsoft 托管代理的当前设计中,每个作业都被分派到新配置的虚拟机(基于从 azure-pipelines-image-generation 存储库模板生成的映像)。这些虚拟机在作业完成后被清理,不会持久化,因此不能重复用于后续作业。虚拟机的短暂性阻止了缓存 Docker 层的重用。

因此,当您使用 Microsoft 托管代理时,VM 上的本地 docker 缓存不能被其他构建使用。

这里有一些替代方法:

  1. 您可以使用self-hosted agent 来执行 docker 构建过程。多个构建可以共享本地缓存。

  2. 您也可以使用Cache taskdocker save/load commonds 将保存的 docker 层上传到 azure devops 服务器并在以后运行时恢复。

  3. 使用 docker pull 从远程仓库拉取镜像。使用 --cache-from 来指向图像。您可以将构建映像推送到远程存储库以进行下一次构建。

您可以参考this blogthis ticket 了解更多详细信息。

【讨论】:

    猜你喜欢
    • 2021-11-26
    • 2022-07-27
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 2020-07-05
    • 2021-04-07
    • 2019-12-02
    相关资源
    最近更新 更多