建置垃圾回收

雖然 docker builder prunedocker buildx prune 命令會立即執行,但垃圾收集會定期執行,並遵循一組有序的清除策略清單。

垃圾收集在 BuildKit 常駐程式中執行。當快取大小過大或快取年齡過期時,常駐程式會清除建置快取。以下章節說明如何透過定義垃圾收集策略來設定大小和年齡參數。

設定

根據建置器執行個體使用的 驅動程式,垃圾收集將使用不同的設定檔。

如果您使用的是 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
  • 規則#0:如果建置快取使用超過 512MB,則在 2 天未使用後刪除最容易重現的資料。
  • 規則#1:移除任何 60 天未使用的資料。
  • 規則#2:將未共享的建置快取保持在上限以下。
  • 規則#3:如果先前的策略不足,則開始刪除內部資料以將建置快取保持在上限以下。

**注意**

Keep Bytes 預設為磁碟大小的 10%。如果無法判斷磁碟大小,則使用 2GB 作為後備。