(转)Docker磁盘垃圾清理

文章转自https://mp.weixin.qq.com/s/S8ZjGZF8oLC8c1JRnkE5yw?tdsourcetag=s_pctim_aiomsg

1、整体分析

对于Docker来说,存在镜像、容器、存储卷和网络这些对象。因此,也就会生产相对应的这些对象,这些对象会占据磁盘空间。当这些对象不在被使用时,为了不占据额外的磁盘空间,就需要对这些对象进行清理,即进行垃圾清理。在docker 1.13版本之后,提供了对各种对象的prune命令,也提供了清理所有对象类型的docker system prune命令。但在docker 1.13之前的版本,则需要提供其他方式进行垃圾清理。

2、垃圾清理

2.1 docker v1.13之后版本的垃圾清理

2.1.1 容器

在停止容器时,系统并不会知道删除这个容器,除非在运行此容器时设置了–rm字段。停止后的容器仍然会占据磁盘的存储空间,通过docker container prune能够删除这些被停止后的容器。

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

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

  1. $ docker container prune --filter "until=24h"

2.1.2 镜像

通过执行docker images prune命令可以清除所有不再使用的镜像,默认情况下此命令仅仅清除状态为dangling的镜像。状态为dangling的镜像为未被打标签和没有被任何容器引用的镜像。

  1. $ docker image prune
  2. WARNING! This will remove all dangling images.
  3. Are you sure you want to continue? [y/N] y

如果要移除所有未被使用的镜像,则通过设置-a字段来实现:

  1. $ docker image prune -a
  2. WARNING! This will remove all images without at least one container associated to them.
  3. Are you sure you want to continue? [y/N] y

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

  1. $ docker image prune -a --filter "until=24h"

2.1.3 存储卷

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

  1. $ docker volume prune
  2. WARNING! This will remove all volumes not used by at least one container.
  3. Are you sure you want to continue? [y/N] y

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

  1. $ docker volume prune --filter "label!=keep"

2.1.4 网络

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

  1. $ docker network prune
  2. WARNING! This will remove all networks not used by at least one container.
  3. Are you sure you want to continue? [y/N] y

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

  1. $ docker network prune --filter "until=24h"

2.1.5 删除所有的对象

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

  1. $ docker system prune
  2. WARNING! This will remove:
  3.        - all stopped containers
  4.        - all networks not used by at least one container
  5.        - all dangling images
  6.        - all build cache
  7. Are you sure you want to continue? [y/N] y

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

  1. $ docker system prune --volumes
  2. WARNING! This will remove:
  3.        - all stopped containers
  4.        - all networks not used by at least one container
  5.        - all volumes not used by at least one container
  6.        - all dangling images
  7.        - all build cache
  8. Are you sure you want to continue? [y/N] y

2.2 docker v1.13之前版本的垃圾清理

2.2.1 容器

在停止容器时,系统并不会知道删除这个容器,除非在运行此容器时设置了–rm字段。停止后的容器仍然会占据磁盘的存储空间,通过docker rm能够删除这些被停止后的容器。通过下面的命令能够清除所有已停止的容器。

  1. $ docker rm $(docker ps -a -q)

2.2.2 镜像

通过执行docker rmi命令可以清除所有不再使用的镜像,一般情况下仅仅清除状态为dangling的镜像。状态为dangling的镜像为未被打标签和没有被任何容器引用的镜像。

  1. $ docker rmi $(docker images -q -f "dangling=true")

2.2.3 存储卷

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

  1. $ docker volume rm $(docker volume ls -q -f dangling=true)

参考资料

1.《docker container prune》地址:https://docs.docker.com/engine/reference/commandline/container_prune/

2.《Prune unused Docker objects》地址:https://docs.docker.com/config/pruning/

3.《docker image prune》地址:https://docs.docker.com/engine/reference/commandline/image_prune/

4.《docker volume prune》地址:https://docs.docker.com/engine/reference/commandline/volume_prune/

5.《docker network prune》地址:https://docs.docker.com/engine/reference/commandline/network_prune/

作者简介:
季向远,北京神舟航天软件技术有限公司。本文版权归原作者所有。

原文地址:https://www.cnblogs.com/shuaiandjun/p/9563262.html

时间: 2024-10-09 23:34:23

(转)Docker磁盘垃圾清理的相关文章

Docker磁盘垃圾清理

1.整体分析 对于Docker来说,存在镜像.容器.存储卷和网络这些对象.因此,也就会生产相对应的这些对象,这些对象会占据磁盘空间.当这些对象不在被使用时,为了不占据额外的磁盘空间,就需要对这些对象进行清理,即进行垃圾清理.在docker 1.13版本之后,提供了对各种对象的prune命令,也提供了清理所有对象类型的docker system prune命令.但在docker 1.13之前的版本,则需要提供其他方式进行垃圾清理. 2.垃圾清理 2.1 docker v1.13之后版本的垃圾清理

Docker主机磁盘垃圾清理

对于Docker来说,存在镜像.容器.存储卷和网络这些对象.因此,也就会生产相对应的这些对象,这些对象会占据磁盘空间.当这些对象不在被使用时,为了不占据额外的磁盘空间,就需要对这些对象进行清理,即进行垃圾清理.在docker 1.13版本之后,提供了对各种对象的prune命令,也提供了清理所有对象类型的docker system prune命令.但在docker 1.13之前的版本,则需要提供其他方式进行垃圾清理. 一.docker v1.13之后版本的垃圾清理 1.1 容器 在停止容器时,系统

其实Mac垃圾清理软件并没有那么可怕

首先也是最重要的一条,不要使用盗版.据我所知市面上见到的盗版cmm是破解以后安装好就可以直接使用的,不需要序列号激活. 作为对盗版软件有高度洁癖而成为厌恶盗版的最大原因的我来说,我很清楚这类被网上非开发者改来改去的程序有多复杂.不可预测.它的扫描和清理方式可能和正版不一样,甚至存在后门,不仅不能正确清理你的电脑,反而会把系统搞乱甚至破坏系统. 所以希望大家去cleanmymac官网下载使用. 另外建议大家使用最新版本的cmm3,不要使用旧版本. 接下来就是怎样正确地清理了.cmm3提供了一个"自

WIN 7 系统垃圾清理.bat

1.新建txt文件 2.复制下面的内容到txt文件中 3.修改文件名为 WIN 7 系统垃圾清理.bat,然后执行该文件即可. @echo off color 0becho ==================================================================echo 您已启动 WIN 7 系统垃圾清理 ,这里运行的命令都很安全!echo ========================================================

Docker registry垃圾回收

Docker registry垃圾回收 通过: docker run -p 5000:5000 -v /netdata/xxxx/registry:/var/lib/registry registry.cn-hangzhou.aliyuncs.com/term/registry-gc:2.7 registry garbage-collect /var/lib/registry/config.yml 搭建好registry服务后,docker push alpine:3.8镜像至registry服

Docker镜像空间清理

#查看docker镜像磁盘空间占用情况docker system df #清理 docker system prune docker system prune 自动清理说明: 该指令默认会清除所有如下资源: 已停止的容器(container) 未被任何容器所使用的卷(volume) 未被任何容器所关联的网络(network) 所有悬空镜像(image). 该指令默认只会清除悬空镜像,未被使用的镜像不会被删除.添加-a 或 --all参数后,可以一并清除所有未使用的镜像和悬空镜像. 可以添加-f

系统垃圾清理利器CCleaner v5.30.6063绿色单文件版(增强版)

系统垃圾清理利器CCleaner现已更新至v5.30.6063,此次更新为Edge.IE浏览器提供了更好的清理功能,更新了Windows Explorer MRU清理功能,同时改善了应用程序中的SSD检测.5.0版全新Modren UI界面设计,简洁大气!内部框架大优化,性能大提升!支持主动防御及监控! CCleaner是梨子公司Piriform最为著名广受好评的软件,系统垃圾清理工具,免费的系统清理优化和隐私保护工具,也是该公司主打和首发产品!它体积小巧.运行速度极快,具有强大的自定义清理规则

Ubuntu 垃圾清理与内核清理

Ubuntu 垃圾清理可以依次采用如下命令 sudo apt-get clean sudo apt-get autoremove sudo apt-get autoclean Ubuntu 内核清理流程 1. 查看所有内核 dpkg --get-selections | grep linux 2. 查看当前内核 uname -a 3. 清理老内核 sudo apt-get remove linux-headers--*** linux-image--*** 4. 更新内核列表grub sudo

垃圾清理

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Diagnostics;using System.IO; //使用C#调用BAT文件实现垃圾清理并显示清理结果//作者:秦