docker的overlay2中存的都是什么及如何清理/var/lib/docker/overlay2

 更新时间:2024年04月18日 11:01:52   作者:鬼鸮  
docke roverlay2是Docker中的存储驱动之一,用于管理镜像和容器层的数据,这篇文章主要给大家介绍了关于docker的overlay2中存的都是什么及如何清理/var/lib/docker/overlay2的相关资料,需要的朋友可以参考下

前段时间有客户反映我们部署服务的服务器磁盘快满了,联系我们说看看清理一下

于是就开始看服务器

我们所有的服务都是使用docker部署的,经过检查,这次占满了磁盘的都是在/var/lib/docker/overlay2目录下的文件夹,这个路径一看就是docker的存储目录,但是为什么docker跑得好好的他的占用会变高呢?

图中可见,/var/lib/docker/overlay2目录的占用大的离谱

那我们进来看看这个目录下是什么占用了这么大的空间

上图可见,/var/lib/docker/overlay2目录下的文件夹名基本都是这种md5编码,并且其中有一个a875e开头的文件夹的占用达到了518G,相当恐怖

/var/lib/docker/overlay2目录存 的到底是什么呢?为什么能有这么大的占用?我们又需要如何去进行清理呢? 我查阅了一些博客文章了解到,overlay2是docker使用的文件存储驱动,也就是说,在/var/lib/docker/overlay2目录下的文件都是docker使用的存储【废话】

overlay2是分层存储,每一层通过本层的md5作为文件夹名来命名,如果要存储的两个东西【比如两个镜像】的底层几层的内容是一样的,那他们的md5就也是一样的,通过md5核验,确认他们这几层是一样的之后,在overlay2中实际存储的时候,这几层就可以只存储一份,然后由这两个东西共用,来达到节省空间的目的。

所以我们在/var/lib/docker/overlay2目录下看到的这茫茫多的md5,就是一层一层的数据 ​

那为什么我们客户服务器上的a875e开头的文件夹占用会达到518G呢?究竟是什么东西占用了这么多? 我们进这个文件夹里看一眼

可以看到,在这个a875e的文件夹中,有一个diff文件夹占用259G,一个merged文件夹占用259G,直觉告诉我这两个文件夹中存储的应该是基本一致的东西 ​

所以是什么东西呢??? ​

经过排查,我们发现是我们一个服务会将一些运行文件存储在本地文件路径中,但是,这个服务在启动的时候因为一些疏忽,没有将他要存储文件的路径挂载到宿主机中,导致这个服务一直在往容器内的某个路径写文件,这个服务在运行了一年多之后写入容器内本地的文件终于到了……259G,但虽然在容器内占用是259G,但是在宿主机上,变成了diff文件夹占用259G,merged文件夹占用259G,合共518G,磁盘空间就这么被吃掉了。 ​

为了测试我们的推断,我们进入容器内删除了那些本地文件,然后再在宿主机上查看宿主机的磁盘占用,果然,我们在容器内删除的文件大小是259G,但是宿主机上空出了518G的空间,故我们可以确定,我们在a875e的文件夹中看到的diff文件夹和merged文件夹,其中实际占用巨量空间的东西就是我们在容器内存储的本地文件,换言之,/var/lib/docker/overlay2目录会存储我们起的容器中的文件【应该还包括我们的镜像本身,docker镜像也是分层存储在这里的,毕竟容器跑起来以后系统相关的一些文件是和镜像一样的】

所以回到标题

docker的overlay2中存的都是什么?

存的是我们的镜像文件和容器内的文件

如何清理/var/lib/docker/overlay2

  • 删除不用的镜像
  • 检查是否有容器内的服务会往容器内的本地写文件
  • 检查各容器的磁盘占用,如果有发现磁盘占用过高的情况则对应处理【原则上如果容器内服务有写文件行为,则写文件的目录应当挂载到宿主机上,而不是直接往容器的本地写
  • 需要应急处理的话可以先进入容器内直接删除容器内可以删除的文件

总结

到此这篇关于docker的overlay2中存的都是什么及如何清理/var/lib/docker/overlay2的文章就介绍到这了,更多相关docker overlay2中存的是什么内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker compose 使用教程

    docker compose 使用教程

    这篇文章主要介绍了docker compose 使用教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Deepin使用docker安装mysql数据库过程详解

    Deepin使用docker安装mysql数据库过程详解

    这篇文章主要介绍了Deepin使用docker安装mysql数据库过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Docker运维一键排查Shell脚本,6大功能搞定容器90%线上故障

    Docker运维一键排查Shell脚本,6大功能搞定容器90%线上故障

    本文介绍了一款自研的Docker一键排查Shell脚本,该脚本主要用于Docker容器运维,包括容器重启、端口占用、磁盘使用、网络故障、镜像臃肿、安全权限等常见问题的排查,感兴趣的朋友一起看看吧
    2024-10-10
  • 在docker容器中调用和执行宿主机的docker操作

    在docker容器中调用和执行宿主机的docker操作

    这篇文章主要介绍了在docker容器中调用和执行宿主机的docker操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • docker修改运行容器环境变量的操作步骤

    docker修改运行容器环境变量的操作步骤

    在现代应用开发中,Docker 提供了一种有效的容器化解决方案,使得应用的部署、扩展和管理变得更加灵活,环境变量在容器化应用中起着重要作用,它们可以帮助配置应用的运行环境,本文小编给大家介绍了docker如何修改运行容器环境变量,需要的朋友可以参考下
    2025-03-03
  • 一文教你轻松搞定Docker无法拉取镜像问题

    一文教你轻松搞定Docker无法拉取镜像问题

    这篇文章主要介绍了当Docker无法成功拉取镜像时可能遇到的问题以及解决方法,文中通过代码介绍的非常详细,对遇到这个问题的同学们具有一定的参考借鉴价值,需要的朋友可以参考下
    2025-02-02
  • Docker运行Web服务实战之Tomcat的详细过程

    Docker运行Web服务实战之Tomcat的详细过程

    Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和Java Server Page(JSP)的支持,这篇文章主要介绍了Docker运行Web服务实战之Tomcat的详细过程,需要的朋友可以参考下
    2022-08-08
  • CentOS 7上安装Docker 1.8 的步骤详解

    CentOS 7上安装Docker 1.8 的步骤详解

    本文分步骤给大家介绍了CentOS 7上安装Docker 1.8 的步骤详解,需要的朋友可以参考下
    2018-11-11
  • Docker私服仓库Harbor安装的步骤详解

    Docker私服仓库Harbor安装的步骤详解

    这篇文章主要介绍了Docker私服仓库Harbor安装的步骤详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • 浅谈docker学习之docker数据卷(volume)

    浅谈docker学习之docker数据卷(volume)

    这篇文章主要介绍了浅谈docker学习之docker数据卷(volume),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12

最新评论