垃圾收集
预计阅读时间:4分钟
该页面包含有关使用开源Docker Registry托管自己的注册表的信息。有关Docker Hub的信息,它提供了托管注册表以及其他功能,例如团队,组织,Web挂钩,自动构建等,请参阅Docker Hub。
从v2.4.0开始,注册表二进制文件中包含一个垃圾收集器命令。本文档描述了此命令的作用以及应如何使用它以及为什么要使用它。
关于垃圾收集
在Docker注册表的上下文中,垃圾回收是清单文件不再引用它们时从文件系统中删除blob的过程。斑点可以包括图层和清单。
注册表数据会占用大量磁盘空间。此外,当需要确保文件系统上不再存在某些层时,垃圾回收可能是安全考虑。
实践中的垃圾收集
文件系统层按其内容地址存储在注册表中。这具有许多优点,其中之一是数据被存储一次并由清单引用。有关更多详细信息,请参见此处。
因此,清单之间共享图层;每个清单都维护对该层的引用。只要一个清单引用了一个层,就不能对其进行垃圾回收。
清单和层可以deleted
与注册表API一起使用(有关详细信息,请参见此处和
此处的API文档)。此API删除对目标的引用,并使它们有资格进行垃圾回收。这也使它们无法通过API读取。
如果删除了层,则在运行垃圾回收时将其从文件系统中删除。如果清单被删除,则在没有其他清单引用它们的情况下,该清单所引用的层将从文件系统中删除。
例子
在此示例中,清单A引用了两层:a
和b
。清单B
引用层a
和c
。在这种状态下,没有任何内容可以进行垃圾收集:
A -----> a <----- B
\--> b |
c <--/
清单B通过API删除:
A -----> a B
\--> b
c
在此状态层中c
不再有引用,并且可以进行垃圾回收。层a
删除了一个引用,但没有收集垃圾,因为清单仍在引用它A
。表示清单的blobB
有资格进行垃圾回收。
运行垃圾收集后,清单A
及其斑点仍然保留。
A -----> a
\--> b
有关垃圾收集的更多详细信息
垃圾收集分为两个阶段。首先,在“标记”阶段,该过程扫描注册表中的所有清单。根据这些清单,它构造了一组内容地址摘要。该集合是“标记集”,表示不删除的斑点集合。其次,在“扫描”阶段,该过程扫描所有Blob,如果Blob的内容地址摘要不在标记集中,则该过程将其删除。
注意:您应确保注册表处于只读模式或根本不运行。如果要在运行垃圾收集时上载图像,则存在图像层被错误删除而导致图像损坏的风险。
这种类型的垃圾收集称为世界停止垃圾收集。
运行垃圾收集
垃圾收集可以如下运行
bin/registry garbage-collect [--dry-run] /path/to/config.yml
垃圾收集命令接受一个--dry-run
参数,该参数在不删除任何数据的情况下打印标记和扫描阶段的进度。以日志级别运行时,info
将清楚指示可以删除的项目。
config.yml文件应采用以下格式:
version: 0.1
storage:
filesystem:
rootdirectory: /registry/data
将注册表日志级别设置为以下值的空运行垃圾收集的示例输出 info
hello-world
hello-world: marking manifest sha256:fea8895f450959fa676bcc1df0611ea93823a735a01205fd8622846041d0c7cf
hello-world: marking blob sha256:03f4658f8b782e12230c1783426bd3bacce651ce582a4ffb6fbbfa2079428ecb
hello-world: marking blob sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4
hello-world: marking configuration sha256:690ed74de00f99a7d00a98a5ad855ac4febd66412be132438f9b8dbd300a937d
ubuntu
4 blobs marked, 5 blobs eligible for deletion
blob eligible for deletion: sha256:28e09fddaacbfc8a13f82871d9d66141a6ed9ca526cb9ed295ef545ab4559b81
blob eligible for deletion: sha256:7e15ce58ccb2181a8fced7709e9893206f0937cc9543bc0c8178ea1cf4d7e7b5
blob eligible for deletion: sha256:87192bdbe00f8f2a62527f36bb4c7c7f4eaf9307e4b87e8334fb6abec1765bcb
blob eligible for deletion: sha256:b549a9959a664038fc35c155a95742cf12297672ca0ae35735ec027d55bf4e97
blob eligible for deletion: sha256:f251d679a7c61455f06d793e43c06786d7766c88b8c24edf242b2c08e3c3f599