背景

在使用docker进行容器化管理后会发现本次硬盘文件占用量在不断上升,并且即使是删除掉容器或者镜像也并不能释放掉对应的硬盘空间。本文将提供对应的docker命令用于真正释放掉该部分应被删除释放的空间却仍然存留占用硬盘空间的相关垃圾文件。

查询命令

docker system df

docker空间占用查看,该命令可以列出docker应用中镜像,容器,数据卷所占用的容量,在此说明下即使是容器被删除了数据卷也不会随着容器的删除而删除。

[root@root ~]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 5 1 1.512 GB 1.386 GB (91%)
Containers 1 0 5 kB 5 kB (100%)
Local Volumes 0 0 0 B 0 B

增加-v命令可以输出更加详细的占用信息,针对每个镜像,每个容器,每个数据卷信息都将被输出。用户可以根据该命令来判断是哪个镜像、容器、数据卷导致的占用过高

docker system df -v
Images space usage: REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
docker.io/nginx latest 5ad3bd0e67a9 7 days ago 126.7 MB 0 B 126.7 MB 1
docker.io/jenkins/jenkins latest 5810ec636c04 5 weeks ago 581.9 MB 0 B 581.9 MB 0
docker.io/ubuntu 14.04 6e4f1fe62ff1 5 weeks ago 196.5 MB 0 B 196.5 MB 0
docker.io/mysql 5.6 e143ed325782 2 months ago 302.4 MB 0 B 302.4 MB 0
docker.io/adoptopenjdk/openjdk8 latest 48f5ba11c251 4 months ago 304.8 MB 0 B 304.8 MB 0 Containers space usage: CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES
39cc6235b753 docker.io/nginx "nginx -g 'daemon ..." 0 5 kB 28 hours ago Exited (0) 26 hours ago xxxx Local Volumes space usage: VOLUME NAME LINKS SIZE

清除命令

自动清理命令

docker system prune可对空间进行自动清理。

该命令所清理的对象如下:

  1. 已停止的容器(未启动的容器)
  2. 未被任何容器使用的卷
  3. 未被任何容器所关联的网络
  4. 所有悬空的镜像(未配置任何Tag(也就是无法被引用)的镜像,通常是由于镜像编译过程中未指定-t参数配置Tag导致的,又或者是在镜像编译过程中因为某种原因导致构建失败的镜像)

docker system prune后可以加额外的参数,如:

  1. docker system prune -a : 一并清除所有未被使用的镜像(未被构建成容器容器的镜像)和悬空镜像。
  2. docker system prune -f : 用以强制删除,不提示信息。

另外除了system级别的,还有针对容器或是镜像级别的删除命令:

  1. docker image prune:删除悬空的镜像。
  2. docker container prune:删除无用的容器。

    --默认情况下docker container prune命令会清理掉所有处于stopped状态的容器

    --如果不想那么残忍统统都删掉,也可以使用--filter标志来筛选出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但24内创建的除外:

    --$ docker container prune --filter "until=24h"
  3. docker volume prune:删除无用的卷。
  4. docker network prune:删除无用的网络

手动删除

也可以通过查询出相关的镜像、容器、数据卷后调用相应的删除语句进行删除。

例如:

  1. 删除所有悬空镜像,不删除未使用镜像:

    docker rmi $(docker images -f "dangling=true" -q)
  2. 删除所有未使用镜像和悬空镜像

    docker rmi $(docker images -q)
  3. 清理卷

    如果卷占用空间过高,可以清除一些不使用的卷,包括一些未被任何容器调用的卷(-v 详细信息中若显示 LINKS = 0,则是未被调用):

    删除所有未被容器引用的卷:

    docker volume rm $(docker volume ls -qf dangling=true)
  4. 容器清理

    如果发现是容器占用过高的空间,可以手动删除一些:

    删除所有已退出的容器:

    docker rm -v $(docker ps -aq -f status=exited)
  5. 删除所有状态为dead的容器

    docker rm -v $(docker ps -aq -f status=dead)

docker - 如何清理硬盘中无关占用的更多相关文章

  1. 一键清理 Nexus 中无用的 Docker 镜像

    现许多团队使用 Nexus 来管理 Docker 镜像,产品不断迭代,镜像仓库占用的磁盘空间也越来越大.由于 Nexus 的控制台并未提供批量操作镜像功能,清理镜像十分不便.本文分享一个清理 Nexu ...

  2. Mac电脑清理硬盘"其他"

    作为一个MacBook的使用者,无不感受到苹果对于系统和硬件的完美匹配. 苹果电脑不适合玩游戏,所以我只用它开发iOS使用.电脑里除了Xcode和常用办公软件与通讯软件以外,我没有装其他的任何大应用. ...

  3. docker 磁盘清理 相关

    用户在使用 Docker 部署业务一段时间后,可能会发现宿主节点的磁盘容量持续增长,甚至将磁盘空间耗尽进而引发宿主机异常,进而对业务造成影响. 本文先对 Docker 的空间分析与清理进行说明,然后对 ...

  4. Android中图片占用内存的计算

    Android中图片占用内存的计算 原文链接 http://blog.sina.com.cn/s/blog_4e60b09d01016133.html   在Android开发中,我现在发现很多人还不 ...

  5. docker实战——在测试中使用Docker

    在之前几章中介绍的都是Docker的基础知识,了解什么是镜像,docker基本的启动流程,以及如何去运作一个容器等等. 接下来的几个章节将介绍如何在实际开发和测试过程中使用docker. 将Docke ...

  6. .net core, docker 在vs2019开发过程中的问题以及解决办法

    .net core, docker 在vs2019开发过程中的问题以及解决办法 记录下来,帮助Ta人~ 1.vs调试,快Build完后提示Docker 端口:xxxx,xxxx,xxxx占用 解决办法 ...

  7. Windows中杀死占用某个端口的进程

    Windows中杀死占用某个端口的进程 netstat -ano | findstr //列出进程极其占用的端口,且包含 80 tasklist | findstr taskkill -PID < ...

  8. [转]Android中内存占用的含义:(VSS,PSS,RSS,USS)

    Android中内存占用的含义:(VSS,PSS,RSS,USS) 作者: andforce 分类: 安卓系统 发布时间: 2013-09-07 00:03 ė1,915 浏览数 6没有评论 在eng ...

  9. 虚拟机中如何Linux系统如何访问PC硬盘中的文件(如何将windows下的文件夹挂载到linux虚拟机下)

    这段时间决定学习嵌入式,变打算安装个Linux系统先熟悉一下Linux系统的使用,但自己电脑上安装的win7系统又不想装双系统,一是闲麻烦,二是由于对Linux系统不熟悉担心会因为自己的误操作而损坏系 ...

随机推荐

  1. 面试官:"谈谈分库分表吧?"

    转自:学习Java的小姐姐 www.cnblogs.com/chenchen0618/p/11624480.html 1.什么是分库分表 从字面上简单理解,就是将原本存储在一个库的数据分块存储在多个库 ...

  2. oracle和mysql区别

    1.本质的区别.oracle是对象关系数据库管理系统,简称ordbms.mysql是开源关系数据库关系系统,简称rdbms.Oracle是收费的.mysql是开源.免费的. 2.数据库安全性.myql ...

  3. windows下使用pycharm配置python的virtualenv环境

    环境:win10 python2.7.10(64) 在path中配置python环境 注意:我这边的环境是py2和py3共存的,但是我这边默认使用的是py2. 在virtualenv环境中安装指定的p ...

  4. 6、RIP

    在路由查找时,有类路由查找方式和无类路由查找的区别:有类路由查找:1.首先匹配主网条目.主网信息2.匹配上主网之后,再去查找子网信息3.查找到子网,就会转发,否则就丢弃4.有一种例外,没有找到主网和子 ...

  5. 自学Java第一章——《Java概述》

    1.1 Java历史 Java诞生于SUN(Stanford University Network),09年SUN被Oracle(甲骨文)收购. Java之父是詹姆斯.高斯林(James Goslin ...

  6. oracle的网络连接

    NAMES.DIRECTORY_PATH常用的值有tnsnames,hostname,onames和ezconnect和 ldap,cds,nis不常用的值,默认值是(tnsnames,onames, ...

  7. 在.NET Core中使用MachineKey

    在.NET Core中使用MachineKey 姐妹篇:<ASP.NET Cookie是怎么生成的> 姐妹篇:<.NET Core验证ASP.NET密码> 在上篇文章中,我介绍 ...

  8. 20200116--python学习第十天

    今日内容 1.参数 2.作用域 3.函数嵌套 内容回顾 线上操作系统:centos py2和py3的区别? 每种数据类型,列举你了解的方法. 3 or 9 and 8 字符串的反转 is 和 == 的 ...

  9. 2Nginx+keepalive+2tomcat 故障转移

    根据真实生产环境 总结. 硬件:共计2台Linux服务器  76和77  每台服务器都安装 Nginx  Keepalive  Tomcat80作为虚拟ip,负责对外连接.   78和79是两台mys ...

  10. sed知识及常用用法梳理

    1.sed命令简介及其参数说明 sed流编辑器,擅长对文本进行增删改查,过滤指定的字符串和取指定行,也可以在行中字符串前后插入内容,功能非常强大. 注意:sed默认只支持基本的正则表达式,如果要想支持 ...