docker磁盘或者镜像清理

1,查看磁盘占用

docker system df 命令,类似于 Linux上的 df 命令,用于查看 Docker 的磁盘使用情况:

docker system df

TYPE列出了 Docker 使用磁盘的 4 种类型:

  • Images :所有镜像占用的空间,包括拉取下来的镜像,和本地构建的。
  • Containers :运行的容器占用的空间,表示每个容器的读写层的空间。
  • Local Volumes :容器挂载本地数据卷的空间。
  • Build Cache :镜像构建过程中产生的缓存空间(只有在使用 BuildKit 时才有,Docker 18.09 以后可用)。

最后的 RECLAIMABLE 是可回收大小。

  • docker system prune : 可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及 dangling 镜像(即无 tag 的镜像)。
  • docker system prune -a : 清理得更加彻底,可以将没有容器使用 Docker镜像都删掉。 注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的 Docker 镜像都删掉了。

2,清理镜像

1,介绍

使用 docker image prune可以 删除未使用的映像,注意API 1.21+ (opens new window)要使用此命令,客户端和守护进程API都必须至少是 1.21

$ docker image prune -h
Flag shorthand -h has been deprecated, please use --help

Usage:  docker image prune [OPTIONS]

Remove unused images

Options:
  -a, --all             Remove all unused images, not just dangling ones 删除所有未使用的映像,而不仅仅是悬空映像
      --filter filter   Provide filter values (e.g. 'until=<timestamp>') 提供过滤值(例如'until =“)
  -f, --force           Do not prompt for confirmation 不要提示确认

2,删除所有悬空镜像

删除所有悬空映像。如果-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
Deleted Images:

3,过滤

过滤标志(--filter)格式为"key = value"。如果有多个过滤器,则传递多个标志(例如--filter "foo=bar" --filter "bif=baz"

目前支持的过滤器是:

  • until(<timestamp>) - 仅删除在给定时间戳之前创建的映像
  • 标签(label=<key>label=<key>=<value>label!=<key>,或label!=<key>=<value>) -仅删除与映像(或没有,如果label!=...被使用)指定的标签。

until过滤器可以是Unix的时间戳,日期格式的时间戳,或持续时间字符串(例如,去10m1h30m)计算相对于守护机器的时间。支持的格式为日期格式时间戳包括RFC3339Nano,RFC3339, ,2006-01-02T15:04:052006-01-02T15:04:05.9999999992006-01-02Z07:002006-01-02。如果在时间戳结束时未提供a Z或 +-00:00时区偏移,则将使用守护程序上的本地时区。提供Unix时间戳时输入秒[.nanoseconds],其中秒是自1970年1月1日(午夜UTC / GMT)以来经过的秒数,不计算闰秒(也称为Unix纪元或Unix时间)和可选项。纳秒字段是一秒的一小部分,不超过九位数。

label过滤器接受两种格式。一个是label=...label=<key>label=<key>=<value>),它删除具有指定标签的映像。另一种格式是label!=...label!=<key>label!=<key>=<value>),它删除没有指定标签的映像。

预测将被删除的内容

如果使用正过滤(测试标签是否存在或标签是否具有特定值),则可以使用docker image ls相同的过滤语法查看哪些映像与过滤器匹配。

但是,如果使用的是负过滤(测试对于不存在标签的或标签并具有特定的值),这种类型的滤波器的不与工作docker image ls所以不能容易地预测哪些映像将被移除。此外,即使您正在使用,确认提示docker image prune 始终会警告所有悬空映像将被删除 --filter

以下删除之前创建的映像2021-01-01T00:00:00

查看:

$ docker images --format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}\t{{.Size}}'
REPOSITORY                                        TAG       IMAGE ID       CREATED AT                      SIZE
test                                              latest    65f677cc947a   2021-08-19 22:38:05 +0800 CST   445MB
registry.cn-hangzhou.aliyuncs.com/eryajf/centos   7.8       5ea7c3a67505   2020-11-01 18:32:46 +0800 CST   475MB

执行删除:

$ docker image prune -a --force --filter "until=2021-01-01T00:00:00"
Deleted Images:
untagged: registry.cn-hangzhou.aliyuncs.com/eryajf/centos:7.8
untagged: registry.cn-hangzhou.aliyuncs.com/eryajf/centos@sha256:f7c413edcad7a3389e079cf04b4cddb46c96d67d29bf8c0d48dbd1ceeee2b474
deleted: sha256:5ea7c3a675055762552ad50b6f293bb050bdee188da3a2c37c61be90450f5987
deleted: sha256:c8279b704e4fb851f28a3fe2f02365df13bed3b6cc9b1fae6b2c50d562b04cec
deleted: sha256:e5a0eda56319769809257786837e4478e778aba54cdac72a468a8ac053637ca4
deleted: sha256:da34d2fe9e29af7b5ad6447089b19c2d0c7aa11d79641ca25e3de88a851706c7
deleted: sha256:613be09ab3c0860a5216936f412f09927947012f86bfa89b263dfa087a725f81

Total reclaimed space: 475.2MB

可以看到在这个时间点之前的centos镜像被删除了。如果这个镜像在占用状态,则不会删除。查看验证:

$ docker images --format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}\t{{.Size}}'
REPOSITORY   TAG       IMAGE ID       CREATED AT                      SIZE
test         latest    65f677cc947a   2021-08-19 22:38:05 +0800 CST   445MB

其他一些用法

  • 删除超过10天240h前创建的映像:

    $ docker image prune -a --force --filter "until=240h"
    
  • 使用标签删除映像deprecated

    $ docker image prune --filter="label=deprecated"
    
  • 删除标签maintainer设置为的映像john

    $ docker image prune --filter="label=maintainer=john"
    
  • 删除没有maintainer标签的映像:

    $ docker image prune --filter="label!=maintainer"
    
  • 删除维护者标签未设置为的映像john

    $ docker image prune --filter="label!=maintainer=john"
    

注意:在prune删除任何内容之前,系统会提示您进行确认,但不会显示可能删除的内容列表。此外,docker image ls不支持负过滤,因此很难预测实际将删除哪些映像。

3,定义容器日志大小

在docker环境部署之后,我们可以直接通过配置文件参数来定义单个容器日志的大小,在/etc/docker/daemon.json添加如下配置后重启docker:

"log-opts": {
    "max-size":"300M",
    "max-file":"3"
  },
"data-root": "/data/docker/docker-data/"

注意:已存在的容器需要删除重建后才可以生效,因此尽量在docker投入生产之前进行配置。

参数说明:max-size指定日志文件最大空间,max-file指定日志滚动的次数,以上配置单个容器最大日志为900M。data-root指定docker数据目录。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CN-FuWei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值