背景
公司服务器资源不够,经常硬盘或者内存不足,这时候就需要手动清理一波无用的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