前言

如果经常使用 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 参数后会删除所有未被引用的镜像而不仅仅是 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 保持清爽和高效。

参考文档

如何快速清理 docker 资源

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

转载于:https://blog.51cto.com/wutengfei/2333326

如何快速清理docker资源相关推荐

  1. 怎样清理苹果电脑磁盘空间_Mac启动磁盘已满?如何快速清理电脑磁盘

    原标题:Mac启动磁盘已满?如何快速清理电脑磁盘 Mac启动磁盘满了怎么办?是不是经常被"mac启动盘已满"这种情况干扰,该如何快速清理苹果电脑磁盘呢?以下六个方法可以轻松帮你解决 ...

  2. docker容器杀不死_了解如何停止,杀死和清理Docker容器

    docker容器杀不死 In the previous article 'learn how to create and start Docker containers', we discussed ...

  3. 清理 Docker 占用磁盘空间

    前言 Docker 容器跑久了,其产生的日志可能会占用比较多的空间,如果你跟我一样,使用的小水管级的服务器,很容易就爆了,此时就需要清理一下,今天恰巧遇到这种情况,具体如下图: 从上图可知,空间使用率 ...

  4. 【Microsoft Azure 的1024种玩法】六十八.基于Azure云平台使用Azure Virtual machines快速搭建Docker容器

    [简介] Docker 是一个开放源代码软件,主要应用于开发应用.交付应用.运行应用,Docker 可以将应用程序及其依赖项打包到可以在任何 Linux.Windows 或 macOS 计算机上运行的 ...

  5. Docker - 清理Docker占用的磁盘空间

    通过docker重新发布一个线上jar包时,报错如下: failed to copy files: failed to copy file: Error processing tar file(exi ...

  6. Mac启动磁盘已满怎么办?教你快速清理电脑磁盘

    Mac启动磁盘满了怎么办?是不是经常被"mac启动盘已满"这种情况干扰,该如何快速清理苹果电脑磁盘呢?以下六个方法可以轻松帮你解决,可以轻松帮助你清理启动盘,释放内存,非常实用,赶 ...

  7. CentOS-7.5下使用yum命令快速安装Docker CE

    < CentOs-7.5下安装Docker CE > 先决条件 在安装Docker CE前,CentOS 系统版本应该升级到64位版本的 CentOS 7或以上,在这儿本次使用的系统版本为 ...

  8. mysql数据清洗_mysql数据库如何实现亿级数据快速清理

    今天收到磁盘报警异常,50G的磁盘被撑爆了,分析解决过程如下: 1. 进入linux服务器,查看mysql文件夹中各个数据库所占的磁盘空间大小 看到了吗,光olderdb就占了25G 2. 用SQLy ...

  9. qq空间网页版电脑_常用QQ软件,电脑C盘快满了,占用太多空间,如何快速清理?...

    常用QQ软件,电脑C盘快满了,占用太多空间,如何快速清理? 如果你的QQ软件经常使用,并且加入的群比较多! QQ群内的图片和消息会非常地多! 如果QQ软件是采用默认安装到C盘的方式, 那么C盘将很快点 ...

最新文章

  1. 世界杯决赛不好看,有点像假球,被裁判黑了?
  2. ZJU PAT 1027 Colors in Mars
  3. 《区块链原理、设计与应用》一1.4 潜在的商业价值
  4. 直接输入地址访问服务器上的静态资源
  5. zephyr 系统--- 内存池使用方法
  6. Python实现局域网(Socket)通信
  7. Java中的数组,列表,集合,映射,元组,记录文字
  8. 值得借鉴的30条好习惯
  9. 关于项目估算的微博讨论
  10. 什么是大数据系统架构
  11. c语言中提取单词首字母,C语言实现单词小帮手
  12. docker用现有容器创建镜像
  13. 安装mysql详细教程(windows 10安装mysql详细教程新手必看)
  14. 小程序z-index层级问题view组件坑,z-index失效
  15. 抖音:对比去年6月蓝V账号数量增长44.6倍 投稿量增长211倍
  16. 读《曾经,我们爱过一个世纪》有感(附原文)
  17. 创新实训(9)——SpringBoot整合solr
  18. 小米手机连接校园网无法跳转到登录界面
  19. python框架sanic_Python Web框架Sanic框架初识
  20. 《论语》原文及其全文翻译 学而篇2

热门文章

  1. 论面向组合子程序设计方法 之 失乐园 之补充
  2. 干掉状态:从session到token
  3. 設計模式之王 - MVC
  4. RobHess的SIFT源码分析:综述
  5. 深度学习RCNN, Fast-RCNN, Faster-RCNN的一些事
  6. 如何在Hadoop上编写MapReduce程序
  7. Day 19: EmberJS 入门指南
  8. 在c#.net通用权限管理系统组件里的 部门经理,分管副总 的管理方法参考
  9. oracle 日期格式转换 ‘ddMONyyyy’ 'ddMMMyyyy'
  10. 如何提高还在用window系统的编码硬效率