专栏首页首富手记docker垃圾回收机制
原创

docker垃圾回收机制

```bash

作者: 张首富

时间: 2019-04-10

w x: y18163201

```

## 说明

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

## docker的垃圾清理

### 清理停止的容器

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

```bash

# docker container prune

WARNING! This will remove all stopped containers.

Are you sure you want to continue? [y/N] y

```

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

```bash

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

```

### 清除不使用的镜像

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

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

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

```bash

# docker image prune

WARNING! This will remove all dangling images.

Are you sure you want to continue? [y/N] y

```

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

```bash

# 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小时的镜像。

```bash

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

```

### 删除存储卷

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

```bash

# 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的存储卷。

```bash

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

```

### 清除网络(iptables规则)

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

```bash

# 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小时的网络。

```bash

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

```

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

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

```bash

# docker system prune

WARNING! This will remove:

- all stopped containers

- all networks not used by at least one containe

- all dangling images

- all build cache

Are you sure you want to continue? [y/N] y

```

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

```bash

# docker system prune --volumes

WARNING! This will remove:

- all stopped containers

- all networks not used by at least one containe

- all volumes not used by at least one containe

- all dangling images

- all build cache

Are you sure you want to continue? [y/N] y

```

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • docker垃圾回收机制

    对于Docker来说,存在镜像/容器/存储卷和网络(iptables规则)这些对象.因此docker也会产生出这些对应的对象,这些对象会占据磁盘空间,当这些对象...

    张琳兮
  • docker 仓库里面python好多tag都代表什么意思?我们该如何选择

    今天让我同事帮忙构建一个基于python代码的docker包,然后他问我使用那个底层镜像,我说你直接去docker hub上找一个,他打开之后问我这么多我该使用...

    张琳兮
  • docker 仓库里面python好多tag都代表什么意思?我们该如何选择

    今天让我同事帮忙构建一个基于python代码的docker包,然后他问我使用那个底层镜像,我说你直接去docker hub上找一个,他打开之后问我这么多我该使用...

    张琳兮
  • docker垃圾回收机制

    对于Docker来说,存在镜像/容器/存储卷和网络(iptables规则)这些对象.因此docker也会产生出这些对应的对象,这些对象会占据磁盘空间,当这些对象...

    张琳兮
  • docker学习11-上传本地镜像到镜像仓库

    在本地自己制作用过镜像后,上传到镜像仓库,这样方便在不同的机器上快速搭建同一套环境。 如果公开的话,别人也可以用你的镜像快速搭建环境,类似于 GitHub 本地...

    上海-悠悠
  • CentOS7的udev的绑定规则

    客户一套RAC环境是华为的存储,共享盘是/dev/sd*,咋一看还怀疑是没有进行多路径配置,实际和主机工程师是已经配置好的,我们使用upadmin show v...

    Alfred Zhao
  • C# params关键字

    1、params关键字的作用 (1)、使用 params关键字可以指定一个方法参数,该方法参数的数目可变。 (2)、可以发送参数声明中所指定类型的逗号分隔的参数...

    郑小超.
  • MongoDB操作&&注入漏洞&&未授权访问漏洞

    注入不止有传统的SQL数据库,NoSQL型数据库也一样存在注入漏洞,在比赛中跟传统的注入相比也算新题型,不少同学可能还不太了解,本文向大家科普MongoDB数据...

    安恒网络空间安全讲武堂
  • 我的 .NET Core 博客性能优化经验总结

    去年8月,我用 .NET Core 重写了我的博客系统。经过一年多的优化,服务器响应速度从上线时候的 80ms 提高到了现在的 8ms,十倍提速。可惜由于部署在...

    Edi Wang
  • 人人都能看懂的云计算知识科普 !

    双十一期间,我想很多小伙伴都被阿里云的促销活动刷屏了,大家组队组团,可以得到较为便宜的阿里云服务器。另外,Docker 也红得发紫,与之对应的 DevOps 和...

    小小詹同学

扫码关注云+社区

领取腾讯云代金券