Docker Overlay2 磁盘空间占用过大清理

DevOps·Docker / Docker Swarm · 2023-10-13 · 19935 人浏览
Docker Overlay2 磁盘空间占用过大清理

我使用的服务器集群架构是三节点Docker Swarm,一主二从。基于Percona XtraDB Cluster(PXC),以及haproxy+keepalived配置了MySQL高可用架构,当然也是三节点的MySQL。今天我通过Haproxy面板,看到第三台服务器的MySQL离线了(pxc03),于是登录到服务器上查看容器的运行日志,别的英文没细看,一眼就看到了no space left,无存储空间了,df -h查看目录占用百分比100%,显然是/目录的磁盘空间满了,下一步就是排查是哪些程序占用了大部分磁盘。

linux怎么查看文件夹多大
  • 1、利用ls命令查看,该命令可将结果以KB、MB等为单位进行显示,语法为ls -llls-lh
  • 2、利用du -h –max-depth=1 *命令,该命令可查看当前目录下的各个文件和文件夹的大小;
  • 3、利用du -sh命令,可查看当前文件夹的总大小;
  • 4、利用du -h –max-depth=0 *命令,可查看直接子目录文件及文件夹大小。

通过查看是/var/lib/docker占用空间过大,通过进一步查看是/var/lib/docker/overlay2目录占用空间大,高达12GB。我之前在另外一台服务器上遇到了这种情况,

当时我的解决方案是把安装在根目录的docker迁移到home下,因为home挂在的磁盘容量较大,但是这种做法是错误的,治标不治本

,即使是迁移了docker安装目录,但是也没有把占用空间大的问题解决,我们需要寻找问题的根本原因,从根本解决这个问题。

第一种情况:是因为docker中部署的系统中日志内容的不断扩大。
这种情况下,我们可手动,或定时任务清理。

对于/var/lib/docker/overlay2 空间占用,存在很多误导的方法是去迁移路径等。。
其实磁盘空间的占用和overlay没关系,它的使用和真实的disk使用相同,overlay只是一个docker的虚拟文件系统,真实的文件系统是前者/dev/vda1,可以看到路径所指为根目录。
所以,通过该目录去查找哪里占用资源过大。

通常情况下与overlay2的同级目录下会有如下的目录:

占用大量空间的日志文件位于containers下,该目录下存在如下目录:

在该目录下,会存在以目录名为前缀,以“-json.log”为后缀的目录文件。
例如:

使用如下命令会看到该文件的大小:ll -h

然后,使用> *-json.log,将该文件进行清理

清理完成可不重启服务,重启更好
清理完后,可通过df -h查看磁盘占用情况

第二种情况:可通过执行docker system prune命令可用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像),我的情况就是这种情况,docker中存在大量废弃的镜像
docker system prune

Docker中查询磁盘占用情况:

这个图片是清理后的截图,清理之前多出来10G+,忘记截图了

docker system prune -a【慎用】命令清理更干净、彻底,可以将没有容器使用的Docker镜像都删掉。

也可以使用Docker的图形化管理工具——Portainer进行查看清理

参考资料
  • Docker篇之Overlay2磁盘空间占用过大清理


Docker Dcoker Swarm
Theme Jasmine by Kent Liao And Bill

本站由提供云存储服务