构建垃圾回收

虽然 docker builder prunedocker buildx prune 命令同时运行,但垃圾回收会定期运行并遵循 Prune 策略的有序列表。

垃圾回收在 BuildKit 守护进程中运行。守护程序清除构建 cache (当缓存大小变得太大或缓存期限到期时)。这 以下部分介绍如何配置 Size (大小) 和 Age (年龄) 参数。

策略的每个参数都对应于一个命令行 论点。有关详细信息,请参阅文档docker buildx prunedocker buildx prune

配置

根据生成器实例使用的驱动程序, 垃圾回收将使用不同的配置文件。

如果您使用的是 docker 驱动程序,则垃圾回收 可以在 Docker 守护程序配置中配置。 文件:

{
  "builder": {
    "gc": {
      "enabled": true,
      "defaultKeepStorage": "10GB",
      "policy": [
        { "keepStorage": "10GB", "filter": ["unused-for=2200h"] },
        { "keepStorage": "50GB", "filter": ["unused-for=3300h"] },
        { "keepStorage": "100GB", "all": true }
      ]
    }
  }
}

对于其他驱动程序,可以使用 BuildKit 配置文件配置垃圾回收:

[worker.oci]
  gc = true
  gckeepstorage = 10000
  [[worker.oci.gcpolicy]]
    keepBytes = 512000000
    keepDuration = 172800
    filters = [ "type==source.local", "type==exec.cachemount", "type==source.git.checkout"]
  [[worker.oci.gcpolicy]]
    all = true
    keepBytes = 1024000000

默认策略

如果未设置,则默认垃圾回收策略适用于所有构建器:

GC Policy rule#0:
        All:            false
        Filters:        type==source.local,type==exec.cachemount,type==source.git.checkout
        Keep Duration:  48h0m0s
        Keep Bytes:     512MB
GC Policy rule#1:
        All:            false
        Keep Duration:  1440h0m0s
        Keep Bytes:     26GB
GC Policy rule#2:
        All:            false
        Keep Bytes:     26GB
GC Policy rule#3:
        All:            true
        Keep Bytes:     26GB
  • rule#0:如果构建缓存使用超过 512MB 的内存,则最容易删除 2 天未使用后的数据可重现。
  • rule#1:删除 60 天未使用的任何数据。
  • rule#2:将 unshared 构建缓存保持在 CAP 下。
  • rule#3:如果以前的策略不足,则开始删除内部数据 将 Build Cache 保持在 CAP.

注意

Keep Bytes默认为磁盘大小的 10%。如果磁盘大小不能 要确定,它使用 2GB 作为回退。