docker删除没用的镜像
Docker采用保守的方法来清理未使用的对象(通常称为“垃圾收集”),例如图像,容器,卷和网络:除非你明确地要求Docker这样做,否则通常不会删除这些对象。这可能导致Docker占用较多额外的磁盘空间。对于每种类型的对象,Docker都提供了一个prune命令修剪一次清理多种类型的对象。本文主要说明如何使用这些prune命令。
prune 镜像
该Docker 镜像 prune命令允许你清理未使用的镜像。默认情况下,docker image prune仅清除dangling 镜像。dangling images是未标记的镜像,并且未被任何容器引用。要删除dangling images:
要删除现有容器未使用的所有镜像,请使用-a标志:
$ docker image prune -a
WARNING! This will remove all images without at least one container associated to them. Are you sure you want to continue? [y/N] y
默认情况下,系统会提示您继续。要绕过提示,请使用-f或--force标志强制删除
您可以使用带有--filter标志的过滤(表达式)限制修剪(删除)哪些镜像。例如,要仅考虑超过24小时前创建的镜像:
$ docker image prune -a --filter"until = 24h"
其他过滤表达式可用。有关更多示例,请参阅docker image prune 参考。
prune 容器
停止容器时,除非使用--rm标志启动容器,否则不会自动删除容器。要查看Docker主机上的所有容器(包括已停止的容器),请使用docker ps -a。您可能会惊讶地发现存在多少个容器,尤其是在开发系统上!停止的容器的可写层仍然占用(占据)磁盘空间。要清除它,可以使用docker container prune命令。
$ docker container prune
WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y
默认情况下,系统会提示您继续。要绕过提示,请使用-f或--force标志。
默认情况下,将删除所有已停止的容器。您可以使用--filter标志限制范围。例如,以下命令仅删除超过24小时的已停止容器:
$ docker container prune --filter"until = 24h"
其他过滤表达式可用。有关更多示例,请参阅docker container prune 参考。
prune 数据卷
卷可以由一个或多个容器使用,占用Docker主机上的空间。卷永远不会自动删除,因为这样做可以破坏数据。
$ docker volume prune
WARNING! This will remove all volumes not used by at least one container. Are you sure you want to continue? [y/N] y
默认情况下,将删除所有未使用的卷。您可以使用--filter标志限制范围。例如,以下命令仅删除未使用保留标签标记的卷(下面的命令只删除未标记为保留标签的卷):
$ docker volume prune --filter"label!= keep"
其他过滤表达式可用。有关更多示例,请参阅docker volume prune 参考。
prune 网络
Docker网络不占用太多磁盘空间,但它们确实创建了iptables规则,桥接网络设备和路由表条目。要清理这些内容,您可以使用docker network prune来清理任何容器未使用的网络。
$ docker network prune
WARNING! This will remove all networks not used by at least one container. Are you sure you want to continue? [y/N] y
默认情况下,系统会提示您继续。要绕过提示,请使用-f或--force标志。
默认情况下,将删除所有未使用的网络。您可以使用--filter标志限制范围。例如,以下命令仅删除超过24小时的网络:
prune 一切
docker system prune命令是修剪镜像,容器,和网络的快捷方式。在Docker 17.06.0及更早版本中,卷也被修剪。在Docker 17.06.1及更高版本中,必须为docker system prune指定修剪卷的--volumes标志。
$ docker system prune
WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all dangling images - all build cache Are you sure you want to continue? [y/N] y
如果您使用的是Docker 17.06.1或更高版本,并且还希望修剪卷,请添加--volumes标志:
$ docker system prune --volumes
WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all volumes not used by at least one container - all dangling images - all build cache Are you sure you want to continue? [y/N] y