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设置mysql不区分大小写问题

    Docker设置mysql不区分大小写问题

    这篇文章主要介绍了Docker设置mysql不区分大小写问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 手把手教你实现Docker 部署 vue 项目

    手把手教你实现Docker 部署 vue 项目

    这篇文章主要介绍了手把手教你实现Docker 部署 vue 项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Docker如何拉取oracle11g镜像

    Docker如何拉取oracle11g镜像

    这篇文章主要介绍了Docker如何拉取oracle11g镜像问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Docker容器网络更改的实现

    Docker容器网络更改的实现

    本文主要介绍了Docker容器网络更改的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 浅谈Docker 客户端和守护进程

    浅谈Docker 客户端和守护进程

    这篇文章主要介绍了浅谈Docker 客户端和守护进程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 如何利用Docker容器实现代理转发与数据备份详解

    如何利用Docker容器实现代理转发与数据备份详解

    这篇文章主要给大家介绍了关于如何利用Docker容器实现代理转发与数据备份的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • 使用Docker run的选项以覆盖Dockerfile中的设置详解

    使用Docker run的选项以覆盖Dockerfile中的设置详解

    今天小编就为大家分享一篇关于使用Docker run的选项以覆盖Dockerfile中的设置详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • 浅谈docker --privileged=true参数作用

    浅谈docker --privileged=true参数作用

    这篇文章主要介绍了浅谈docker --privileged=true参数作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Docker如何进入启动容器

    Docker如何进入启动容器

    本篇文章主要介绍了Docker如何进入启动容器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Docker容器中数据卷volumes的使用

    Docker容器中数据卷volumes的使用

    volume(卷)用来存储docker持久化的数据,其实就是一个主机上的一个目录,由docker统一管理,下面这篇文章主要给大家介绍了关于Docker容器中数据卷volumes使用的相关资料,需要的朋友可以参考下
    2022-04-04

最新评论