构建垃圾回收

docker builder prunedocker buildx prune 命令同时运行时,垃圾回收会定期运行,并遵循一个有序的清理策略列表。

垃圾回收在 BuildKit 守护程序中运行。当缓存大小变得过大或缓存过期时,守护程序会清除构建缓存。以下部分介绍了如何通过定义垃圾回收策略来配置大小和年龄参数。

策略的每个参数都对应一个docker buildx prune命令行参数。详细信息请参阅 docker 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: 保持未共享的构建缓存低于上限。
  • rule#3: 如果之前的策略不足以开始删除内部数据, 以使构建缓存保持在上限以下。

注意

Keep Bytes 默认为磁盘大小的10%。如果无法确定磁盘大小,则使用2GB作为备用值。