查找占用最大磁盘的docker

背景

公司服务器资源不够,经常硬盘或者内存不足,这时候就需要手动清理一波无用的docker数据。
一般情况下,通过清理无效的docker 镜像或者数据卷就可以释放一定的磁盘空间。但有时候我们需要知道是哪些docker占用了那么大的磁盘,里面存放了哪些大数据,如果是没有的大数据就可以清理掉。也可以通过转移大磁盘的docker到其他宿主机上来释放磁盘。
这个步骤大部分下情况清理磁盘空间是有效的。

直接上脚本

#!/bin/bash

# 在 /var/lib/docker/overlay2 目录下查找最大的超过1G的五个数据卷
cd /var/lib/docker/overlay2 || exit

biggest_volumes=$(du -sh * | sort -hr | awk '$1 ~ /G$/  && NR <= 5 {print}')

IFS=$'\n' #变更换行符

# 遍历每个最大的数据卷,找到与之关联的docker容器ID,并输出其具体信息
for volume_info in $biggest_volumes; do
    echo "Data Volume Directory: $volume_info"
    volume_dir=$(echo "$volume_info" | awk  '{print $2}')
    for container_id in $(docker ps --quiet); do
        if docker inspect "$container_id" | grep -wq "$(basename "$volume_dir")"; then
            echo "  Docker ID: $container_id"
            #docker inspect $container_id | grep $(basename "$volume_dir") #数据卷的信息
        fi
    done
done

输出结果:

Data Volume Directory: 4.5G     eb971a9be815283e7d654672db47ecd2d863759f909cfd8a4c49230f23197ff3
  Docker ID: 39abd9cdabae
Data Volume Directory: 4.4G     b4286af602d2ba1195ea502969dd55728110b7c2a4563079c0c2651f2e5af5aa
  Docker ID: b4e0f085fa77
Data Volume Directory: 4.3G     1ae8f6ba0377bf12808b115646995693cc3291d7ecc26e12bd4441a22a0fb035
  Docker ID: c608e3726a3d
Data Volume Directory: 3.6G     eab36a24a37bf71baf43e9b497367b750692a2ce9757dbbc23c7fe389bd565e4
  Docker ID: d3cbccf91455
Data Volume Directory: 2.0G     5f66bf2d54f94e0ab50ca811450dbd8bcebb1308fc5f66733c0d7ff9bf6c8e24
  Docker ID: 4fada18bc287

最后可以通过进入到docker id来判断里面是什么数据占用那么大的内存。

docker exec -it 39abd9cdabae bash

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值