docker buildx build 中 --cache-to/from 和 --mount type=cache 之间的区别

pka*_*mol 5 containers caching docker dockerfile

根据官方文档,为了利用缓存后端docker buildx build,您需要使用--cache-from/to标志。

这是有道理的,因为直观上它表示构建结果将缓存到的位置 ( --cache-to) 以及它将使用什么缓存来加速构建过程 ( --cache-from)。

但是,还有另一种选择(?),即mountRUN 指令中使用带有选项的缓存,如下所示:(官方示例)

RUN \
    --mount=type=cache,target=/var/cache/apt \
    apt-get update && apt-get install -y git
Run Code Online (Sandbox Code Playgroud)

在最后一个示例中,apt将从哪里检索这些(在我们的例子中是包)?

缓存后端( 等)是否s3适用gha于这种情况?

这两种情况是互补的还是正交的?

BMi*_*tch 5

他们正在解决两个不同的问题。

--cache-to/from用于存储构建步骤的结果并在将来的构建中重用它,从而避免再次运行该命令。它存储在构建器外部的持久位置(例如注册表中),以便其他构建器可以跳过已经完成的构建步骤,即使映像不是在本地系统上构建的。

--mount type=cache在 RUN 步骤中执行的临时容器内创建安装。当步骤本身未缓存时,此安装将在以后的构建执行中重用。当一个步骤拉取大量不需要在映像中并且可以在构建之间安全地重用的外部依赖项时,这非常有用。挂载缓存的存储位于构建器本地,并且在首次使用时是一个空目录。

  • @DavidMaze 是的。将 `--mount=type=cache` 视为 buildx 为该步骤安装命名卷。该卷不会进入映像,但对于在构建之间重用目录中的内容非常有用。 (2认同)