一、问题描述

突然发现服务器磁盘使用超过95%了(截图时2.1 和 2.2 已经执行过了)

docker 查看容器所占 磁盘大小 查看docker占用_docker

二、问题分析与解决

2.1,docker 无用镜像占用磁盘

# 使用 docker images 查看服务的镜像
docker images

# 可以手动删除一些很大不用的
docker rmi ***


## 也可以用下面的命令批量删除无用的镜像
# 删除未被任何容器使用的镜像《我一般使用这个命令》
docker image prune -a


# 删除未使用的资源(容器、镜像、卷和网络等)《慎用》
docker system prune

2.2,docker 日志积累过多

### Docker 容器的日志文件可能会增长并占用大量的磁盘空间。可以检查并删除不再需要的容器日志文件。

## 这个命令将删除 /var/lib/docker/containers/ 目录下的容器日志文件。
# docker 默认安装目录执行命令
# sudo find /var/lib/docker/containers/ -name "*-json.log" -type f -delete

# 本人Docker映射在数据盘/data 中
sudo find /data/docker/containers/ -name "*-json.log" -type f -delete


## 修改 daemon.json 配置,增加对log日志限制
vim /etc/docker/daemon.json

# 增加如下配置
"log-opts":{
    "max-size":"100m","max-file":"3"
}

2.3, docker/overlay2 下的容器文件(主要)

#### /var/lib/docker/overlay2 目录下的大文件是Docker镜像或容器的层(layers)。这些层可能是由于之前的Docker容器未正确清理或删除,导致残留的层文件。

## 进入docker目录
# cd /var/lib/docker
# 本人Docker映射在数据盘/data 中
cd /data/docker

# 检索文件的最大深度1,即只检索汇总计算当前目录下的文件
du -h --max-depth=1

# 执行后发现确实是overlay2下占用最大,继续往下找
cd overlay2
du -h --max-depth=1

# 发现有很多容器,仔细发现有几个占用特别大,于是先用命令吧大文件过滤出来(只显示大于5GB的文件和目录)
du -h --max-depth=1 --threshold=5G

# 执行发现一个 635G 的文件夹,继续往下找
# 这里出现了两个docker比较重要的文件夹
# diff 文件夹: diff 文件夹是一个只读的文件系统层,它包含了Docker镜像的变更内容。当您对容器进行修改或添加新文件时,这些变更会被记录在 diff 文件夹中。每个Docker镜像都有一个对应的 diff 文件夹,用于存储与基础镜像的差异。
# merged 文件夹: merged 文件夹是一个可读写的文件系统层,它是由基础镜像和 diff 文件夹合并而成的。当您启动一个Docker容器时, merged 文件夹中的内容将作为容器的文件系统。这个文件夹是容器运行时的可写层,您可以在容器中对文件进行修改或添加新文件,这些修改将存储在 merged 文件夹中。
# 综上所述 这两个文件夹内容是一样的 merged会多一些由容器本身产出的写文件,进merged继续往下找
# 终于发现因为该项目一直有报错,导致日志一直积累;自己的项目这个时候就去解决这个问题,然后重新部署一下;问题解决

docker 查看容器所占 磁盘大小 查看docker占用_容器_02

docker 查看容器所占 磁盘大小 查看docker占用_容器_03

三、清除完后查看效果

docker 查看容器所占 磁盘大小 查看docker占用_docker 查看容器所占 磁盘大小_04