docker垃圾回收机制

作者: 张首富
时间: 2019-04-10
个人博客: www.zhangshoufu.com
QQ群: 895291458

说明

对于Docker来说,存在镜像/容器/存储卷和网络(iptables规则)这些对象.因此docker也会产生出这些对应的对象,这些对象会占据磁盘空间,当这些对象不会再被使用的时候,为了节省磁盘空间,就需要对这些对象进行清理,即docker的垃圾清理.我们这边针对docker 1.13 以后的版本进行清理

docker的垃圾清理

清理停止的容器

当我们使用docker stop $ContainerName命令停止容器的时候,系统并不知道会删除这个容器,除非在运行此容器的时候设置了-rm参数,停止后的容器仍然会占据cipan的存储空间,通过docker container prune能够删除这些被停止后的容器

# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

执行此命令时,默认会提示是否继续。如果在执行命令是设置了-f或–force字段,则会直接删除已所有已停止的容器。默认情况下,此命令执行时会删除所有的已停止的容器,也可以通过设置–filter字段,来过滤所要删除的容器。例如,下面的命令仅仅删除停止超过24小时的容器。

# docker container prune --filter "until=24h"

清除不使用的镜像

通过执行docker images prune命令可以清除所有不再使用的镜像,默认情况下此命令仅仅清除状态为dangling的镜像。

什么样的镜像才为dangling的镜像: 为未被打标签和没有被任何容器引用的镜像。

什么情况下才会出现: 原来为 mongo:3.2, 随着官方镜像维护, 发布了新版本后, 重新 docker pull mongo:3.2 时, mongo:3.2 这个镜像名被转移到了新下载的镜像身上, 而旧的镜像上的这个名称则被取消, 从而成为了 . 除了 docker pull 可能导致这种情况, docker build 也同样可以导致这种现象. 由于新旧镜像同名, 旧镜像名称被取消, 从而出现仓库名、标签均为 的镜像.

# docker image prune

WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y

移除所有未被使用的镜像,这需要通过设置-a字段来实现,只要未被使用都会被删除

# docker image prune -a

WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y

执行此命令时,默认会提示是否继续。如果在执行命令是设置了-f或–force字段,则会直接进行删除操作。可以通过设置–filter字段,来过滤所要删除的镜像。例如,下面的命令仅仅删除停止创建超过24小时的镜像。

# docker image prune -a --filter "until=24h"

删除存储卷

存储卷可以被一个或者多个容器使用,也会占据磁盘空间。为保持数据,存储卷永远都不会自动被删除.

# docker volume prune

WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N] y

执行此命令时,默认会提示是否继续。如果在执行命令是设置了-f或–force字段,则会直接进行删除操作。默认情况下,此命令执行时会删除所有的未被使用的存储卷,也可以通过设置–filter字段,来过滤所要删除的存储卷。例如,下面的命令仅仅删除label值为keep的存储卷。

# docker volume prune --filter "label!=keep"

清除网络(iptables规则)

docker网络并不会占据磁盘空间,但是会创建iptables规则,桥网络设备和路由表。因此,但如何不再使用这些资源时,应该对其进行清理。

# docker network prune

WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N] y

执行此命令时,默认会提示是否继续。如果在执行命令是设置了-f或–force字段,则会直接进行删除操作。默认情况下,此命令执行时会删除所有的未被使用的网络,也可以通过设置–filter字段,来过滤所要删除的网络。例如,下面的命令仅仅为被使用超过24小时的网络。

# docker network prune --filter "until=24h"

删除所有的对象(镜像,容器,网络,数据卷)

通过docker system prune命令能够快速的删除所有的未被使用的对象,包括镜像、容器、网络和存储卷。在docker 17.06.0之前,存储卷会同时被清理。在docker 17.06.1之后,需要通过设置–volumes字段,才会同时清理存储卷。

# docker system prune

WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y

如果所使用的docker 17.06.1之后的版本,则需要在命令后添加–volumes字段来清理存储卷的内容。

# docker system prune --volumes

WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all volumes not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y

docker 垃圾回收机制的更多相关文章

  1. Docker垃圾回收机制

    由Docker垃圾回收机制引发的一场血案 AlstonWilliams 关注 2017.04.01 19:00* 字数 1398 阅读 253评论 0喜欢 0 今天早晨,在我还没睡醒的时候,我们团队中 ...

  2. .net垃圾回收机制编程调试试验

    1. 什么是CLR GC? 它是一个基于引用跟踪和代的垃圾回收器. 从本质上,它为系统中所有活跃对象都实现了一种引用跟踪模式,如果一个对象没有任何引用指向它,那么这个对象就被认为是垃圾对象,并且可以被 ...

  3. JavaScript具有自动垃圾回收机制

    JavaScript具有自动垃圾回收机制 原理: 找出那些不再继续使用的变量,然后释放其占用的内存.   正常的生命周期:     局部变量指在函数执行的过程中存在.而在这个过程中,会为局部变量在栈或 ...

  4. java垃圾回收机制

    1 .垃圾回收机制(GC)垃圾回收就是回收内存中不再使用对象:(1)垃圾回收的步骤:1)查找内存中不再使用的对象:2)释放这些对象所占用的内存:(2)查找内存中不再使用的对象方法:1)引用计数法如果一 ...

  5. 垃圾回收机制GC知识再总结兼谈如何用好GC

    一.为什么需要GC 应用程序对资源操作,通常简单分为以下几个步骤: 1.为对应的资源分配内存 2.初始化内存 3.使用资源 4.清理资源 5.释放内存 应用程序对资源(内存使用)管理的方式,常见的一般 ...

  6. 【转载】Java垃圾回收机制

    原文地址:http://www.importnew.com/19085.html Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联 ...

  7. 【转】深入理解 Java 垃圾回收机制

    深入理解 Java 垃圾回收机制   一.垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再 ...

  8. JAVA的垃圾回收机制

    1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象:而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的 ...

  9. Python的垃圾回收机制

    Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾.在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的 ...

随机推荐

  1. 【Linux常见命令】date命令

    Linux date命令:可以用来显示或设定系统的日期与时间. 在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下: 时间方面: %H : 小时(00..2 ...

  2. Leetcode PHP题解--D75 706. Design HashMap

    2019独角兽企业重金招聘Python工程师标准>>> D75 706. Design HashMap 题目链接 706. Design HashMap 题目分析 自行设计一个has ...

  3. 已有项目接入git远程仓库

    1.项目根目录初始化git仓库 git init 2.将本地项目与远程仓库关联(首先得在远程创建一个代码仓库) git remote add origin 远程仓库地址 诺,仓库地址就是这个玩意 3. ...

  4. js数组排序和打乱

    js数组根据不同的业务需求,会要求数组有序或者无序,记录一下流传较广,通用性较强的排序和乱序方法. 数组排序: arr.sort(function(a,b){//从小到大 return a-b;[re ...

  5. JS省城级联

    2019独角兽企业重金招聘Python工程师标准>>> 这里是HTML内容 <label class="control-label col-md-2 col-sm-3 ...

  6. 对包含HttpContext.Current.Cache的代码进行单元测试

    假设我们如下代码调用了HttpContext.Current.Cache 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class CacheManager { ...

  7. 瑞幸咖啡还是星巴克,一杯下午茶让我明白 设计模式--模板方法模式(Template Method Pattern)

    简介 Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template M ...

  8. P2480 [SDOI2010]古代猪文

    P2480 [SDOI2010]古代猪文 比较综合的一题 前置:Lucas 定理,crt 求的是: \[g^x\bmod 999911659,\text{其中}x=\sum_{d\mid n}\tbi ...

  9. python(If 判断)

    一.if判断 如果 条件满足,才能做某件事情, 如果 条件不满足,就做另外一件事情,或者什么也不做 注意: 代码的缩进为一个 tab 键,或者 4 个空格 在 Python 开发中,Tab 和空格不要 ...

  10. swupdate 之 readback handler

    背景 使用 swupdate 作为 OTA 方案 ,有项目要求在写入数据到分区之后需要再次读出校验. 初步实现:readout-verify attribute 初步分析有两种方式 方案一 在每一笔数 ...