Docker build cache是 否自动清除?

问题描述 投票:0回答:1

我无法确定是否自动清除了Docker的本地构建缓存。

如果清除了,多久一次?这是我们可以配置的东西吗?有年龄限制或总缓存大小限制吗?

请注意,这个问题不是关于如何在构建映像时绕过缓存,也不是关于如何手动清除缓存,也不是关于如何利用缓存机制来加快Docker构建速度。这些问题已被广泛记录。这个问题的目的是找出Docker如何内部管理其构建缓存。如果不手动清除,它会永远存在吗?它会自行过期吗?怎么样?

docker
1个回答
1
投票

如果清除了,多久一次?这是我们可以配置的东西吗?是有年龄限制,或总缓存大小限制?

您可以在Docker构建期间使用--no-cache标志来使缓存无效。您没有配置,docker构建过程会在构建时检查每个层和指令,以从缓存或忽略的缓存中考虑。

在一个简单的世界中,码头工人在其末端构建过程控制缓存,并使用--no-cache提供标志以使缓存无效,使事情变得简单。

但是,如果您确实让Docker使用其缓存,那么了解何时可以找到匹配的映像非常重要。 Docker遵循的基本规则概述如下:

杠杆构建缓存

[构建映像时,Docker会逐步执行您中的说明Dockerfile,以指定的顺序执行每个文件。作为各指示经过检查,Docker在其缓存中寻找一个现有映像,可以重复使用,而不是创建新的(重复的)图像。

  • 从已在缓存中的父映像开始,下一个将指令与从中得出的所有子图像进行比较基本图像,以查看其中是否使用完全相同的图像构建指令。如果不是,则缓存为invalidated

  • 在大多数情况下,只需将Dockerfile中的指令与一张子图像就足够了。但是,某些说明需要更多的检查和解释。

  • 对于ADD and COPY指令,文件中的文件内容检查图像并为每个文件计算校验和。的文件的上次修改时间和上次访问时间不是在这些校验和中考虑。在缓存查找期间,校验和与现有图像中的校验和进行比较。如果有什么已更改文件(例如内容和元数据),然后缓存无效。

  • ADD and COPY命令之外,缓存检查不会容器中的文件以确定缓存是否匹配。例如,处理RUN apt-get -y update命令时,文件更新为不检查容器以确定是否存在缓存命中。在在这种情况下,仅使用命令字符串本身来查找匹配项。

一旦缓存失效,所有后续的Dockerfile命令生成新图像,并且不使用缓存。

dockerfile_best-practices-Leverage-build-cache

您可以探索--cache-from

使图层缓存保持一致

使用--cache-from,您可以指定docker构建会将其视为缓存层源的图像列表。因此,您可以不用依赖未指定的local state,而可以依赖注册表中的标记图像。

faster-ci-builds-with-docker-cache

© www.soinside.com 2019 - 2024. All rights reserved.