使用过滤器清理 Docker 数据
除了清理所有未使用的数据之外,docker system prune
还允许你使用过滤器来选择性地删除 Docker 对象。这让你能更精细地控制要清理的内容。
过滤器可以应用于不同类型的对象。对于 docker system prune
,你可以根据对象的使用时长等条件进行过滤。
让我们创建更多的 Docker 对象来演示过滤功能。我们将运行几个容器,然后停止它们。
运行第一个容器:
docker run -d --name oldcontainer ubuntu sleep 10
这个容器将运行 10 秒,然后退出。
运行第二个容器:
docker run -d --name newcontainer ubuntu sleep 20
这个容器将运行 20 秒,然后退出。
等待两个容器都退出。你可以使用 docker ps -a
检查它们的状态。
docker ps -a
你应该会看到 oldcontainer
和 newcontainer
的状态均为“Exited”。
现在,让我们使用一个过滤器来只删除超过特定时长的对象。我们可以使用 until
过滤器并指定一个时长。例如,要删除超过 5 秒未使用的对象,可以使用 until=5s
。
让我们尝试删除超过 15 秒未使用的对象。这应该会删除 oldcontainer
,但保留 newcontainer
(前提是你等待的时间足够让 oldcontainer
退出,但 newcontainer
还未退出)。
docker system prune -f --filter "until=15s"
观察输出。它应该表明 oldcontainer
已被删除,但 newcontainer
应该仍然存在。
验证容器状态:
docker ps -a
你应该会看到 newcontainer
被列出,但 oldcontainer
应该已被删除。
现在,让我们再次进行清理,这次删除超过 30 秒未使用的对象。这应该也会删除 newcontainer
。
docker system prune -f --filter "until=30s"
观察输出。它应该表明 newcontainer
已被删除。
再次验证容器状态:
docker ps -a
应该没有容器被列出。
过滤器为定制清理过程提供了强大的方法。你可以根据要清理的对象类型(容器、镜像、卷、网络)使用不同的过滤键。until
过滤器通常用于清理在特定时长内未使用的对象。