英文:
Difference between --cache-to/from and --mount type=cache in docker buildx build
问题
根据官方文档,为了在docker buildx build
中利用缓存后端,您需要使用--cache-from/to
标志。
这有道理,因为直观地表示构建结果将被缓存到的地方(--cache-to
),以及用于加速构建过程的缓存(--cache-from
)。
然而,还有另一种使用RUN
指令 中的mount
选项来使用缓存的替代方式(官方示例如下):
RUN \
--mount=type=cache,target=/var/cache/apt \
apt-get update && apt-get install -y git
在最后一个示例中,这些(在我们的情况下是apt
包)将从哪里获取?
缓存后端(例如s3
、gha
等)是否适用于这种情况?
这两种情况是互补的还是正交的?
英文:
According to the official documentation, in order to leverage a cache backend in docker buildx build
, you need to use the --cache-from/to
flags.
This makes sense as intuitively it signifies the place where the build result will be cached to (--cache-to
) and what cache it will use to speed up the build process (--cache-from
).
However, there is another alternative (?) of using cache with the mount
option within the RUN
directive, as in: (official example)
RUN \
--mount=type=cache,target=/var/cache/apt \
apt-get update && apt-get install -y git
In the last example where these (apt
packages in our case) will be retrieved from?
Is the cache backend (s3
, gha
etc) applicable in this case?
Are these two cases complementary or orthogonal?
答案1
得分: 2
--cache-to/from
用于存储构建步骤的结果,并在将来的构建中重用它,避免再次运行命令。这些结果存储在构建器之外的持久位置,比如注册表,这样其他构建器即使在本地系统上没有构建镜像也可以跳过已经完成的构建步骤。
--mount type=cache
在临时容器内创建一个挂载点,该挂载点在运行步骤中执行。当步骤本身未缓存时,此挂载点在后续构建执行中被重用。当一个步骤下载了许多不需要包含在镜像中的外部依赖项,并且可以在构建之间安全地重用时,这将非常有用。挂载点缓存的存储是在构建器本地的,并在首次使用时是一个空目录。
英文:
They are solving two different problems.
--cache-to/from
is used to store the result of a build step and reuse it in future builds, avoiding the need to run the command again. This is stored in a persistent location outside of the builder, like on a registry, so that other builders can skip already completed steps of a build even if the image wasn't built on the local system.
--mount type=cache
creates a mount inside the temporary container that's executed in a RUN step. This mount is reused in later executions of the build when the step itself is not cached. This is useful when a step pulls down a lot of external dependencies that do not need to be in the image and can safely be reused between builds. The storage of the mount cache is local to the builder and is an empty directory on first use.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论