docker垃圾清理方式

 更新时间:2025年03月06日 09:13:59   作者:R-sz  
文章主要介绍了如何删除Docker镜像和容器、清理Docker磁盘空间以及配置Docker日志大小,通过这些方法可以有效地管理Docker资源,避免磁盘空间不足的问题

一.docker镜像与容器删除

docker images    #查看所以镜像
docker ps      #查看正在运行的容器
docker ps -a   #查看所有容器(无论是否在运行)  
docker ps -a -q   #加上-q只显示id

docker stop 容器名或id   #停止容器
docker rm 容器名或id    #删除容器
docker rm -f 容器名或id    #强制删除容器
docker rmi 镜像名加上标签或id   #删除镜像
docker rmi -f 镜像名加上标签或id  #强制删除镜像
docker rmi $(docker images | grep "<none>" )  
#使用grep匹配删除所有为none的容器
docker rmi $(docker images -q)
# 要删除全部image

二.docker磁盘空间清理

1.使用docker system清理

docker system df命令查看docker占用的磁盘空间,类似linux的df命令

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          18        6         2.508GB   1.892GB (75%)
Containers      19        2         275.8MB   275.8MB (99%)
Local Volumes   95        3         140.9kB   140.9kB (100%)
Build Cache     0         0         0B        0B

可以看到,Docker镜像占用了2.5GB磁盘,Docker容器占用了275.8MB磁盘,Docker数据卷占用了一点磁盘。

  • docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。
  • docker system prune -a命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。这个很危险,一般不用

2. 手动清理Docker镜像/容器/数据卷

对于旧版的Docker(版本1.13之前),是没有docker system命令的

对于docker而言,一点点的容器镜像空间是没有多少的,日志是大头

所以删除日志才是王道(删之前要考虑清楚哦)

在linux上,Docker的所有相关文件,包括镜像、容器等一般都保存在/var/lib/docker/目录中:

使用du命令查看占用

du -hs /var/lib/docker/
3.4G    /var/lib/docker/

刚建立不是很多,但是还是有点大的

使用du命令继续查看,可以定位到真正占用这么多磁盘的目录

3.4G    /var/lib/docker/overlay2

发现是overlay2占用的,overlay2 是 Docker 默认的存储驱动之一,主要用于管理容器的文件系统层(Layer)

它存储的是 镜像层和容器层的数据,这个一般不直接清理,通过删除容器和镜像清理

但是上次在云服务器上有个服务宕机了,一查发现是空间不够导致数据库连不上,赶紧释放了一些资源

后面发现是/var/lib/docker/containers占了200多G

发现是一个比赛平台的日志占用了190多G这就对了,每天请求这么多,日志不多才怪

使用truncate命令,可以将容器的日志文件“清零”:

truncate -s 0 /var/lib/docker/containers/容器id/*-json.log

当然,这个命令只是临时有作用,日志文件迟早又会涨回来。要从根本上解决问题,需要限制容器的日志文件大小。这个可以通过配置日志的max-size来实现,可以通过容器的docker-compose配置文件我是gzctf平台,为 gzctf 和 db 服务添加 logging 配置:

 logging:
      driver: "json-file"
      options:
        max-size: "10g"
        max-file: "3"

重启容器之后,其日志文件的大小就被限制在30GB,分三个文件,再也不用担心了!

在重启docker,刷新磁盘状态

三、Docker目录/var/lib/docker/containers文件太大

Docker在不重建容器的情况下,日志文件默认会一直追加,时间一长会逐渐占满服务器的硬盘的空间,内存消耗也会一直增加,我们要加以控制

1. 查出占用磁盘较大的文件

Docker 的日志文件存在 /var/lib/docker/containers 目录中,通过下面的命令可以将日志文件夹根据升序的方式罗列出来。

sudo du -d1 -h /var/lib/docker/containers | sort -h

2. 清理单个文件

感觉哪个容器的日志太大就清理哪个

sudo sh -c "cat /dev/null > 文件的决定地址"

这只是临时解决的方式,最好是创建容器时就控制日志的大小.

启动容器时,我们可以通过参数来控制日志的文件个数和单个文件的大小

# max-size 最大数值
# max-file 最大日志数
$ docker run -it --log-opt max-size=10g --log-opt max-file=3 redis
#在dockerfile目录内

一两个容器还好,但是如果有很多容器需要管理,这样就很不方便了,最好还是可以统一管理

3. 全局配置

创建或修改文件 /etc/docker/daemon.json,并增加以下配置

{
    "log-driver":"json-file",
    "log-opts":{
        "max-size" :"50m","max-file":"1"
    }
}

这个配置是用于 Docker 日志驱动及日志选项的设置,主要功能是控制 Docker 容器日志文件的生成方式和大小限制,下面详细解释各部分含义:

整体作用:

此配置一般会放在 /etc/docker/daemon.json 文件里,属于 Docker 守护进程的全局配置,对新创建的容器生效。其目的是规范容器日志的存储格式、大小以及文件数量,防止日志文件过度占用磁盘空间。

具体配置项解释:

1. "log-driver":"json-file"

  • log-driver 指的是 Docker 采用的日志驱动类型。日志驱动决定了容器日志的存储和输出方式。
  • json-file 表示使用 JSON 文件作为日志存储格式。当容器产生日志时,日志内容会以 JSON 格式记录到文件中,每个日志条目是一个 JSON 对象,包含时间戳、日志级别、日志消息等信息。这种格式便于机器解析和处理日志数据。

2. "log-opts"

  • log-opts 是日志驱动的具体选项,用来进一步配置日志的存储和管理规则。

3. "max-size" :"50m"

  • max-size 定义了单个日志文件的最大大小。这里设置为 "50m",即 50MB。
  • 当单个日志文件达到 50MB 时,Docker 会自动创建一个新的日志文件继续记录日志,以此避免单个日志文件过大。

4. "max-file":"1"

  • max-file 规定了日志文件的最大数量。这里设置为 "1",意味着最多只保留 1 个日志文件。
  • 当新的日志文件创建后,旧的日志文件会被自动删除,以保证日志文件数量不超过设定值。结合 max-size 为 50MB 和 max-file 为 1 的设置,容器日志文件占用的磁盘空间最大不会超过 50MB。

示例总结:

该配置使得 Docker 容器的日志以 JSON 文件格式存储,每个日志文件最大为 50MB,并且最多只保留 1 个日志文件。这样做能有效控制容器日志占用的磁盘空间,防止因日志文件不断增长而耗尽磁盘资源。不过要注意,此配置对已经存在的容器不会生效,只有新创建的容器才会遵循这些规则。

随后重启 Docker 服务

sudo systemctl daemon-reload
sudo systemctl restart docker

不过已存在的容器不会生效,需要重建才可以!

还有

{
    "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
    "registry-mirrors": [
        "https://docker.hpcloud.cloud",
    "https://docker.m.daocloud.io",
     "https://docker.unsee.tech",
    "https://docker.1panel.live",
    "http://mirrors.ustc.edu.cn",
    "https://docker.chenby.cn",
    "http://mirror.azure.cn",
    "https://dockerpull.org",
    "https://dockerhub.icu",
    "https://hub.rat.dev"
    ],
    "log-driver":"json-file",
    "log-opts":{
        "max-size" :"20m","max-file":"3"
    }
}

这段配置是 Docker 构建器(Builder)的垃圾回收(Garbage Collection,GC)相关配置,通常在 Docker 的配置文件(如 daemon.json)中使用,下面为你详细解释各部分的含义。

整体功能概述:

此配置主要用于控制 Docker 构建过程中产生的临时文件和中间层的垃圾回收机制,目的是有效管理磁盘空间,避免构建过程中产生的大量临时数据占用过多磁盘。

具体配置项解释:

1."builder"

  • 这是一个顶级配置项,用于对 Docker 构建器的各项参数进行设置。
  • 构建器负责执行 Docker 镜像的构建任务,此配置块中的内容会影响构建器在构建过程中的行为。

2."gc"

  • 这是 builder 下的子配置项,代表垃圾回收(Garbage Collection)相关的设置。
  • 垃圾回收机制会定期清理构建过程中不再需要的临时文件和中间层,释放磁盘空间。

3."defaultKeepStorage": "20GB"

  • defaultKeepStorage 定义了在执行垃圾回收操作后,构建器默认保留的磁盘空间大小。
  • 这里设置为 "20GB",意味着在进行垃圾回收时,构建器会尝试清理不再使用的临时数据,直到构建过程所占用的磁盘空间不超过 20GB。也就是说,即使有大量可清理的中间层和临时文件,构建器也会保留至少 20GB 的磁盘空间用于后续的构建操作。

4."enabled": true

  • enabled 是一个布尔值,用于开启或关闭构建器的垃圾回收功能。
  • 设置为 true 表示启用垃圾回收机制,构建器会定期检查并清理不再使用的临时数据;若设置为 false,则垃圾回收机制将被禁用,构建过程中产生的临时数据不会被自动清理,这可能会导致磁盘空间被大量占用。

总结

这段配置开启了 Docker 构建器的垃圾回收功能,并规定在垃圾回收后至少保留 20GB 的磁盘空间用于构建操作。通过合理配置垃圾回收机制,可以有效管理磁盘空间,确保 Docker 构建过程的稳定性和高效性。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • docker compose入门helloworld的详细过程

    docker compose入门helloworld的详细过程

    docker-compose是基于docker的,所以我们需要先安装docker才能使用docker-compose,接下来通过本文给大家介绍docker compose入门helloworld的过程,一起看看吧
    2021-09-09
  • 在Docker上安装配置Oracle教程

    在Docker上安装配置Oracle教程

    本篇文章主要介绍了在 Docker 上配置 Oracle教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 解决docker修改mysql配置文件的问题

    解决docker修改mysql配置文件的问题

    今天在用docker启动一个5.7的数据库在建表时候遇到一个问题,但是很快就解决了,下面小编给大家讲解下docker怎么修改mysql内部的配置,感兴趣的朋友跟随小编一起看看吧
    2022-10-10
  • Docker 容器全部停止的几种方法实现

    Docker 容器全部停止的几种方法实现

    我们需要停止所有的容器时,可以使用一些命令来实现,本文主要介绍了Docker 容器全部停止的几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • docker安装使用xdebug的过程

    docker安装使用xdebug的过程

    这篇文章主要介绍了docker安装使用xdebug的过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Docker nacos集群部署的实现

    Docker nacos集群部署的实现

    本文将深入探讨如何使用Docker来部署Nacos集群,从而实现服务的快速扩展、高可用性和可维护性,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 深入解析docker文件分层原理

    深入解析docker文件分层原理

    这篇文章主要介绍了docker文件分层,本文使用一个docker container示例,讲述docker的文件分层的一些原理,需要的朋友可以参考下
    2022-04-04
  • Docker 安装Redis 无法使用配置文件设置密码问题及解决方法

    Docker 安装Redis 无法使用配置文件设置密码问题及解决方法

    最近开发需要使用各种组件,如果都到开发机上安装,会占用电脑资源较多,所以使用docker容器来安装这些组件,这篇文章主要介绍了Docker安装Redis无法使用配置文件设置密码问题,需要的朋友可以参考下
    2023-08-08
  • IDEA 通过docker插件发布springboot项目的详细教程

    IDEA 通过docker插件发布springboot项目的详细教程

    这篇文章主要介绍了IDEA 通过docker插件发布springboot项目的详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Docker部署FastDFS的实现方法

    Docker部署FastDFS的实现方法

    这篇文章主要介绍了Docker部署FastDFS的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论