Docker用户会在使用docker一段时间后发现宿主机的磁盘很容易就快被占满,并且手动docker rmi [imgName]似乎并不能释放磁盘,貌似想删掉的镜像依然在宿主机中,下面针对这一问题提出一些解决方案。

Docker空间占用查看

1.13版本后Docker提供给了一些System命令,例如df命令查看Docker占用分布:

$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 3 0 5.373GB 5.373GB (100%)
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
$ docker system df -v 命令可以进一步查看空间占用细节,以确定是哪个镜像、容器或本地卷占用过高空间

清理方法

1 自动清理命令

docker system prune可对空间进行自动清理。
该命令所清理的对象如下:

已停止的容器
未被任何容器使用的卷
未被任何容器所关联的网络
所有悬空的镜像

对于上面提到的一些镜像或容器的状态,需要我们心里有点数:

已使用的镜像:指所有已被容器(包括stop的)关联的镜像,也就是docker ps -a所看到的所有容器对应的image。
未引用镜像:没有被分配或使用在容器中的镜像
悬空镜像(dangling image):未配置任何Tag(也就是无法被引用)的镜像。通常是由于镜像编译过程中未指定-t参数配置Tag导致的。

docker system prune后可以加额外的参数,如:
docker system prune -a : 一并清除所有未被使用的镜像和悬空镜像。
docker system prune -f : 用以强制删除,不提示信息。

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

docker image prune:删除悬空的镜像。

docker container prune:删除无用的容器。
--默认情况下docker container prune命令会清理掉所有处于stopped状态的容器
--如果不想那么残忍统统都删掉,也可以使用--filter标志来筛选出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但24内创建的除外:
--$ docker container prune --filter "until=24h" docker volume prune:删除无用的卷。
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)
删除所有状态为dead的容器
docker rm -v $(docker ps -aq -f status=dead)

docker的容器和镜像的清理的更多相关文章

  1. 【转】深入 Docker:容器和镜像

    在本专栏往期的 Flux7 系列教程 里,我们已经简单地探讨了 Docker 的基本操作.而在那篇教程中,我们一直是简单地将容器当成是"正在运行的镜像",并没有深入地区分镜像和容器 ...

  2. 【转载】Docker registry仓库历史镜像批量清理

    前言 在jenkins CI/CD流水线中以自动打包并push镜像的方式运行了一段时间之后, docker registry中堆积的历史镜像数量极多,磁盘空间告急,为此,有必要定期做镜像的清理,并释放 ...

  3. Docker | 使用dockerfile生成镜像,清理docker空间

    用dockerfile生成镜像并挂载数据卷 编写dockerfile文件 创建dockerfile01 文件 # 基础镜像 FROM centos VOLUME ["volume01&quo ...

  4. docker中容器和镜像的区别

    自学docker过程中一直搞不明白 镜像容器的关系,网上查阅看到一篇文章觉得讲的很好,转载记录. 转自 http://blog.csdn.net/chszs/article/details/48252 ...

  5. Docker基于容器创建镜像

    docker commit -m "提交信息" -a "作者信息" imgId imgName

  6. docker的容器和镜像的差别

  7. docker容器与镜像的区别

    今天抛开原理,抛开底层.通俗的讲解docker中容器与镜像的区别. 对于初学者来说,刚刚接触docker会有点迷,特别是镜像与容器.其实我们可以理解镜像与容器为一对多的关系. 下图错误的示范,为什么是 ...

  8. docker: 构建自己的镜像

    我们给予ubuntu的镜像然后拷贝python的requirement.txt文件进去,再根据这个文件安装对应的python库 拷贝文件到docker容器.首先查找对应的容器ID.然后执行命令 doc ...

  9. Docker应用容器引擎

    1.Docker概述 1.1.Docker简介 Docker 是一个开源的应用容器引擎,基于 Go 语言开发.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到 ...

随机推荐

  1. bzoj4066: 简单题 K-Dtree

    bzoj4066: 简单题 链接 bzoj 思路 强制在线.k-dtree. 卡常啊.空间开1e6就T了. 代码 #include <bits/stdc++.h> #define my_m ...

  2. 【Python笔记】1、格式化输出(%用法和format用法)

    转自:https://www.cnblogs.com/fat39/p/7159881.html 一.格式化输出1.整数的输出%o —— oct 八进制%d —— dec 十进制%x —— hex 十六 ...

  3. Linux防火墙配置方法

    1)查看防火墙状态 查看防火墙状态: /etc/init.d/iptables status 暂时关闭防火墙: /etc/init.d/iptables stop 重启防火墙: /etc/init.d ...

  4. shell 文件的包含

    使用.或者source api.sh function intadd() { let data=$+$ echo $data } test.sh #!/bin/bash . api.sh read d ...

  5. Nginx服务器作反向代理实现内部局域网的url转发配置

    情景 由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口.非80 ...

  6. 分布式系统 与 Google

    google 论文 http://duanple.com/?p=170 google 论文与开源 http://duanple.com/?p=1096 分布式系统论文集 https://github. ...

  7. Netty通信网络参数配置

    Netty服务端/客户端网络通信过程中常用的参数: Name Associated setter method "writeBufferHighWaterMark" 默认64 * ...

  8. 直接从ADB接出串口调试

    1,从硬件接出串口线 2,用串口工具连接上串口工具,串口工具地址:https://files.cnblogs.com/files/senior-engineer/%E4%B8%B2%E5%8F%A3% ...

  9. 通过下载git包来安装git

    Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.而国外的GitHub和国内的Coding都是项目的托管平台.但是在使用Git工具的时候,第一步要学会如何安装gi ...

  10. dubbo 报错问题记录:may be version or group mismatch

    凌晨时候钉钉告警群里一直大量报错: 接口异常报警:项目:mp-rest,域名:inside-mp.01zhuanche.com,IP:10.30.3.60,接口地址:/api/v3/driverLog ...