Docker 使用越久,磁盘占用越大?

原创 小鹏哥 

收录于合集#docker6个

前言

今天在开发环境的mysql数据库里建表时提示磁盘空间已满,打开shell工具查阅发现开发服务器里面40g的硬盘空间,只有20k的可用空间了。

遇到这种问题,首先需要定位是哪些目录导致磁盘空间占用过大的情况。

我们先输入脚本df -h查看服务器的磁盘占用情况,发现FileSystemoverlay,挂载目录为/var/lib/docker/overlay2/xxx占用大量的磁盘空间。

释放docker overlay2占用的空间

用过docker的多少都清楚,overlay2是docker的存储服务,docker容器在运行中产生的一系列文件都会在/var/lib/docker/overlay2目录有所反馈,所以当我们找到了占用磁盘空间的目录后定位进去,找到对应的容器一切就好解决了。

最终发现是我的一个.NetCore Work docker容器服务每天都产生了日志,且日志存储在容器的logs目录下,即使我的docker日志服务使用了loki进行采集且做了日志的限定容量配置也于事无补,因为docker的日志服务只会对采集的日志进行处理,对于容器内的应用存储的日志文件它是无权进行处理的。

定位问题中使用到的命令

这次定位问题也用到了一些比较实用的命令,这里也记录下来分享一波。

命令

备注

df -h

查看服务器的磁盘占用情况

du -sh *

查看当前目录下各文件及目录的磁盘占用情况

find /var/lib/docker/overlay2/ -type f -size +100M -print0 | xargs -0 du -h | sort -nr

查找指定目录下所有大于100M的所有文件,这里指定的目录就是 /var/lib/docker/overlay2/

docker volume prune

删除docker服务无用的卷

docker network prune

删除docker服务无用的网络

总结

1、开发的应用如果采取容器化部署时,对于会累计增长磁盘使用空间的地方需要使用与宿主映射的方式开放出来,明确的告知宿主方,方便清理; 

2、对于累计增长的日志文件,采取自动删除的方式保证磁盘空间的膨胀问题;

3、生产服务做好巡检,问题及时发现,及时解决;

 

小鹏哥

钟意作者