背景

在使用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. C++ 强制类型转换详解

    类型转换只不过是让编译器以另外一种方式解释一块内存而已.C++兼容C语言的强制类型转换方式,同时也提供了新型的基于模板的类型转换方式,来提供更多的安全性. 一.C风格的强制类型转换 double k ...

  2. SQL Server 2012 安装完成后,无法通过 sa账号登录

    1.打开 SQL server  configuration manager 2.打开 SQLserver 网络配置 打开 SQLSERVER的协议 3.右击 TCP/IP协议,选择 IPALL ,在 ...

  3. Java使用自定义类加载器实现热部署

    热部署: 热部署就是在不重启应用的情况下,当类的定义即字节码文件修改后,能够替换该Class创建的对象.一般情况下,类的加载都是由系统自带的类加载器完成,且对于同一个全限定名的java类,只能被加载一 ...

  4. CCF_201612-1_最大波动

    http://115.28.138.223/view.page?gpid=T47 水. #include<iostream> #include<cstring> #includ ...

  5. ZOJ 4067 Books (2018icpc青岛J) (贪心)

    题意 给你一个长度为n的数组,代表每一个物品的价格.你有一个初始钱数\(x\),采用以下方法贪心: 从\(1\)到\(n\)扫一遍,如果\(x\)不比\(a[i]\)小,就买下它,买不起就跳过. 给你 ...

  6. Why Oracle VIP can not be switched to original node ?

    Oracle RAC is an share everything database architecture. The article is how to check out why virtual ...

  7. JFrame的getContentPane

    我们可以在 JFrame 对象中添加 AWT 或者 Swing 组件.但是,虽然它有 add 方法,却不能直接用于添加组件,否则会抛出异常.造成这个现象的原因只有一个解释:JFrame 不是一个容器, ...

  8. BeautifulSoup入门

    BeautifulSoup库入门 BeautifulSoup库的理解 BeautifulSoup库是解析.遍历.维护”标签树”的功能库 示例代码: from bs4 import BeautifulS ...

  9. 并发编程的基石——AQS类

    本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 本文参考了[Java多线程进阶(六)-- J.U.C之l ...

  10. PWA(Progressive web apps),渐进式 Web 应用

    学习博客:https://www.jianshu.com/p/098af61bbe04 学习博客:https://www.zhihu.com/question/59108831 官方文档:https: ...