当前位置: 首页 > 编程笔记 >

如何快速清理 docker 资源的方法

邰建业
2023-03-14
本文向大家介绍如何快速清理 docker 资源的方法,包括了如何快速清理 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 提供了方便的 docker system prune 命令来删除那些已停止的容器、dangling 镜像、未被容器引用的 network 和构建过程中的 cache:

$ docker system prune

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

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

这次不仅会删除数据卷,而且连确认的过程都没有了!注意,使用 --all html" target="_blank">参数后会删除所有未被引用的镜像而不仅仅是 dangling 镜像。

这里有必要解释一下何为 dangling images,其实可以简单的理解为未被任何镜像引用的镜像。比如在你重新构建了镜像后,那些之前构建的且不再被引用的镜像层就变成了 dangling images:

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

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

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

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

让 docker 回到安装时的状态

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

回想我们前面介绍的 docker system prune --all --force --volumns 命令,如果在执行这个命令前系统中所有的容器都已停止,那么这个命令就会移除所有的资源!好,现在让我们想办法停掉系统中的所有容器。

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

$ docker container ls -a -q

-a 显示所有的容器,-q 只显示数字形式的容器 ID。

然后把这里命令执行的结果作为 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 文件中就可以了!

执行一次清理任务:

总结

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

参考:

Clean out your Docker images, containers and volumes with single commands

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 我们在使用Akka HTTP构建的web服务器上遇到了奇怪的内存行为。我们的架构是这样的: Web服务器路由调用各种参与者,为将来获取结果并将其流式传输到响应 参与者调用非阻塞操作(使用期货),组合和处理从中提取的数据,并将结果传送给发送者。我们使用标准的Akka Actor,实现它的receive方法(不是Akka键入的) 应用程序中的任何地方都没有阻止代码 当我在本地运行web服务器时,一开始

  • 我试图完全清理资源组在Azure。 删除资源组不是选项(访问权限:参与者,而不是所有者) 做到这一点的最优雅和明显的方法(也在一些文章中描述)是使用“空”部署模板执行完整的部署: 删除SQL Server开始“...”接受“...”失败“...”开始“...”接受“...”失败“... 你想到主意了。 其他时候效果很好。 您将得到数据库删除的无限循环“开始..接受..失败..开始..接受..失败.

  • 我刚刚注意到我的笔记本电脑上的磁盘空间用完了。通过发现,Docker使用了很多: 文件夹包含152个以结尾的文件夹。 我已经运行了以下命令来清理 什么是,为什么它会消耗那么多空间,我如何清理它? 我有Docker版本17.06.1-CE,版本874A737。它是在一次清理之后发生的,所以这肯定还是一个问题。

  • 本文向大家介绍Android studio 快速删除无用资源的方法,包括了Android studio 快速删除无用资源的方法的使用技巧和注意事项,需要的朋友参考一下 1、在Anaylze中选择Run Inspection by Name... 2、在点击之后弹出的窗口输入unused resources后,回车 3、根据情况,选择情况,选择整个项目、指定Module...,也可以自己过滤。点击o

  • 本文向大家介绍svn 清理失败 (cleanup 失败) 的快速解决方法,包括了svn 清理失败 (cleanup 失败) 的快速解决方法的使用技巧和注意事项,需要的朋友参考一下 1、cmd指令,进入.svn目录,找到wc.db文件 sqlite 3 打开 2、 对 svn源代码目录 右键, clean up, 稍等1至5分钟左右,然后会提示 清理成功 以上就是小编为大家带来的svn 清理失败 (

  • 学习5阶段 getting start 入门 guide 指南 doc 查api 阅读源码 向开源贡献代码 你该阅读源码? 上面已经说了,第四个阶段才是读源码 原因是,必须熟练才有用,不然读了也白扯 熟练使用该模块 熟练掌握npm 熟练掌握nodejs语法 有了这个前提你就可以阅读了。 当然事情也不能绝对,没这些,你也可以看,从中找出有用的写法或者学习代码规范也是好的。 看目录结构(express