Prune unused Docker objects

docker image prune -f 删除没有名字的镜像
对于不再使用的对象如镜像、容器、volumes以及网络 Docker采取的是被动清理(类比垃圾回收)机制:除非使用docker提供的命令手动进行清理,否则它们一般是不会被清除掉。这些没有使用的对象当然会占用额外宝贵的空间资源。Docker为不同的对象提供了各自的对象清理命令prune;另外还提供了docker system prune命令可一次性清理多个未使用对象。
今天要讨论的就是这些关于清理的命令:prune
官网地址

Prune images

To remove dangling images
命令docker image prune用以清理不再使用的docker镜像。执行 docker image prune 默认仅清理悬挂的镜像。悬挂镜像是一种没有标记并且没有被任何容器引用的镜像。

docker image prune

要删除现有容器未使用的所有image,请使用-a标志:

docker image prune -a

默认情况下,系统会提示您继续。要绕过提示请使用-f或 --force 标志。 您可以使用Docker提供了–filter标志筛选出想要保留的镜像。例如:只清除超过创建时间超过24小时的镜像可以这样来操作

docker image prune -a --filter "until=24h"

其他筛选表达式也是可用的。有关更多示例,请参见docker image prune

Prune containers

如果容器启动时没有指定--rm选项,容器停止时是不能够自动清除的。有时候我们无所事事的敲下docker ps -a命令会惊奇的发现,天哪,居然有这么多容器,有运行着的也有停止了的。它们是哪里来的?它们到底还有没有人在关注?这种情况在一个开发环境上尤其常见。要知道即使容器已经停掉了也会占用空间资源。好吧,让我们用 docker container prune命令来结束这些一团糟的东西吧:

docker container prune

和镜像清理的情况一样,也会有提示信息告诉你是否继续,默认是yes;如果提示信息烦到了你的话就加上 -f 或者 --force标志强制清除就可以了。
默认情况下 docker container prune命令会清理掉所有处于 stopped 状态的容器;如果不想那么残忍统统都删掉,也可以使用 --filter 标志来筛选出不希望被清理掉的容器。下面是一个筛选的例子,清除掉所有停掉的容器,但24内创建的除外:

docker container prune --filter "until=24h"

其他的筛选条件的实现可以参考:docker container prune reference 这里有更多的详细的例子。

Prune volumes

Volumes可被一个或多个容器使用会消耗host端的空间,但它不会自动清理,因为那样就有可能破坏掉有用的数据。

docker volume prune

和conatiner一样,手动清理Volume时会有提示信息,增加 -f 或 --force标志可以跳过提示信息直接清理。使用过滤参数 --filter来筛选出不希望清理的无用Volume,否则默认会将所有没有使用的volumes都清理掉。下面的例子演示了除 lable=keep外的volume外都清理掉(没有引用的volume):

docker volume prune --filter "label!=keep"

其他的筛选条件的实现可以参考: docker volume prune reference 这里给出了更多参考示例。

Prune networks

虽然Docker networks占用的空间不多,但是它会创建iptable 规则、虚拟网桥设备以及路由表项,有洁癖的你看到这么多"僵尸"对象会不会抓狂?当然,我们还是要用清理神器:docker network prune 来清理没有再被任何容器引用的networks:

docker network prune

以通过 -f 或者 --force标志跳过提示信息来强制执行该命令。默认情况会清除所有没有再被引用的networks,如果想要过滤一些特定的networks,可以使用 --filter来实现。下面这个例子就是通过 --filter 来清理没有被引用的、创建超过24小时的networks。

docker network prune --filter "until=24h"

更多关于docker network的 --filter 的筛选条件可参考示例: docker network prune reference

Prune everything

如题这里要讲的就是清理everything:images ,containers,networks一次性清理操作可以通过docker system prune来搞定。在Docker 17.06.0 以及更早的版本中,这个 docker system prune 也会将volume一起清理掉;在Docker 17.06.1以及后期的版本中则必须要手动指定 --volumes 标志才能够清理掉volumes:

docker system prune

在Docker 17.06.1或更高版本中添加 --volumes 标志的情况:

docker system prune --volumes

默认情况下,系统会提示您继续。要绕过提示,请使用-f或 --force 标志。
If you want to change, no one can stop you from becoming stronger!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光落入你灰蒙蒙的眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值