svn怎么执行清理命令_详解如何快速有效的清理 docker资源?

概述

如果大家有经常使用 docker,就会发现 生产环境的docker 占用的资源膨胀很快,其中最明显的应该是对磁盘空间的占用。下面将介绍如何快速的清理 docker 占用的系统资源,实际上就是删除那些无用的 镜像、容器、网络和数据卷。


查看 docker 占用的资源

在进行资源清理之前我们有必要搞清楚 docker 都占用了哪些系统的资源。

  • docker container ls:默认只列出正在运行的容器,-a 选项会列出包括停止的所有容器。
  • docker image ls:列出镜像信息,-a 选项会列出 intermediate 镜像(就是其它镜像依赖的层)。
  • docker volume ls:列出数据卷。
  • docker network ls:列出 network。
  • docker info:显示系统级别的信息,比如容器和镜像的数量等。

通过这些命令查看 docker 使用的资源情况后,知己知彼,就可以开干啦!


只删除那些未被使用的资源

Docker 提供了方便的 docker system prune 命令来删除那些已停止的容器、dangling 镜像、未被容器引用的 network 和构建过程中的 cache:

$ docker system prune
2ac78a43bafa7c8699c3ab888ffb9e91.png

注意:这个命令默认不会删除那些未被任何容器引用的数据卷,如果需要同时删除这些数据卷,你需要显式的指定 --volumns 参数。比如你可能想要执行下面的命令:

$ docker system prune --all --force --volumns

这次不仅会删除数据卷,而且连确认的过程都没有了!注意,使用 --all 参数后会删除所有未被引用的镜像而不仅仅是 dangling 镜像(未被任何镜像引用的镜像)

比如在你重新构建了镜像后,那些之前构建的且不再被引用的镜像层就变成了 dangling images:

be1da18a7b9eee012b9464f13ff453f1.png

在本地的镜像更新之后,就会出现类似图中红框内的 镜像。这表示旧的镜像已经不再被引用了,此时它们就变成了 dangling images。如果使用 -a 参数,你还会发现另外一种类型的 镜像,它们的 repository 和 tag 列都表现为 :

1fb21906f61538654f4f46c6cb076053.png

这些镜像被称为 intermediate 镜像(就是其它镜像依赖的层)。

我们还可在不同在子命令下执行 prune,这样删除的就是某类资源:

  • docker container prune # 删除所有退出状态的容器
  • docker volume prune # 删除未被使用的数据卷
  • docker image prune # 删除 dangling 或所有未被使用的镜像

让 docker 回到安装时的状态

这里的 "安装时的状态" 指资源占用情况而不是 docker 的相关配置。这也是一种比较常见的用例,比如小编就需要在一个干净的 docker 环境中自动化的还原出某天的一个生产环境(使用生产环境的备份数据)用于 bug 调查。

docker container stop 命令可以停止一个或多个容器,我们只需要把系统中所有在运行的容器罗列出来就可以了。由于 docker 并不介意我们再次停止一个已经停止了的容器,干脆简单粗暴点,直接列出所有的容器(包括已经停止的)!

$ docker container ls -a -q
503a9f2b0e3f973aba7c40723f0cb296.png

然后把这里命令执行的结果作为 docker container stop 命令的参数:

$ docker container stop $(docker container ls -a -q)

完整的恢复 docker 环境的命令如下:

$ docker container stop $(docker container ls -a -q) && docker system prune --all --force --volumns

和前面的 prune 命令类似,也可以完全删除某一类资源:

  • 删除容器:docker container rm $(docker container ls -a -q)
  • 删除镜像:docker image rm $(docker image ls -a -q)
  • 删除数据卷:docker volume rm $(docker volume ls -q)
  • 删除 network:docker network rm $(docker network ls -q)

小技巧--创建 shell 别名

上面的命令可以完成任务但是却很繁琐,我们可以通过 shell 的别名功能来简化这些命令的执行。

alias docker-clean-unused='docker system prune --all --force --volumes'alias docker-clean-all='docker stop $(docker container ls -a -q) && docker system prune --all --force --volumes'

把上面的命令写入到用户的 ~/.bashrc 文件中就可以了!

47dfa775ff2c49caf7eee627381bcb26.png

执行一次清理任务:

fa7f908265f6aa655214fcb2a04bcf28.png

总结

经常清理系统资源不仅能够让系统运行的更流畅,也利于我们把精力集中在相关的重点资源上面。大家有空的话可以使用相关的资源清理命令,让 docker 整体保持高效。

后面小编会分享更多devops方面的干货,感兴趣的朋友可以关注一下~

4b3d38fce004d897655414429a6552af.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值