
docker支持多种graphDriver,包括vfs、devicemapper、overlay、overlay2、aufs等等,其中最常用的就是aufs了,但随着linux内核318把overlay纳入其中,overlay的地位变得更重,最近也在自己的虚拟机上用overlay2作为docker存储驱动实验了一番,下面来做一个简单的笔记和总结。
docker默认的存储目录是 /var/lib/docker ,下面我们简单打印一下这个目录:
在这里,我们只关心 image 和 overlay2 就足够了。
做这个实验之前,我们应该先启动一个容器,在这里使用nginx作为实验:
可以看到新启动的nginx容器的id是 86b5733e54c7 ,我们继续往下看。
上面说了,我们只需要关心 /var/lib/docker/image 和 /var/lib/docker/overlay2 ,可以先到 /var/lib/docker/image 打印一下:
我们只能看到overlay2这个目录,想必聪明的你也猜到了,docker会在 /var/lib/docker/image 目录下按每个存储驱动的名字创建一个目录,如这里的 overlay2 。
接下来,使用 tree 命令浏览一下这个目录:
这里的关键地方是 imagedb 和 layerdb 目录,看这个目录名字,很明显就是专门用来存储元数据的地方,那为什么区分image和layer呢?因为在docker中,image是由多个layer组合而成的,换句话就是layer是一个共享的层,可能有多个image会指向某个layer。
那如何才能确认image包含了哪些layer呢?答案就在 imagedb 这个目录中去找。比如上面启动的nginx容器,我们可以先找到这个容器对应的镜像:
可以看到,imageID是 2bcb04bdb83f ,再次记住这个id,我们打印 /var/lib/docker/image/overlay2/imagedb/content/sha256 这个目录:
第一行的 2bcb04bdb83f7c5dc30f0edaca1609a716bda1c7d2244d4f5fbbdfef33da366c 正是记录我们 nginx 镜像元数据的文件,接下来cat一下这个文件,得到一个长长的json:
由于篇幅原因,我只展示最关键的一部分,也就是 rootfs 。可以看到rootfs的diff_ids是一个包含了3个元素的数组,其实这3个元素正是组成 nginx 镜像的3个layerID,从上往下看,就是底层到顶层,也就是说 5dacd731af1b0386ead06c8b 是image的最底层。既然得到了组成这个image的所有layerID,那么我们就可以带着这些layerID去寻找对应的layer了。
接下来,我们返回到上一层的 layerdb 中,先打印一下这个目录:
在这里我们只管 mounts 和 sha256 两个目录,再打印一下 sha256 目录:
在这里,我们仅仅发现 5dacd731af1b038 这个最底层的layer,那么剩余两个layer为什么会没有呢?那是因为docker使用了chainID的方式去保存这些layer,简单来说就是chainID=sha256sum(H(chainID) diffid),也就是 5dacd731af1b038 的上一层的sha256 id是:
这个时候,你能看到 166d13b 这个layer层的目录了吧?依次类推,我们就能找出所有的layerID的组合。
但是上面我们也说了, /var/lib/docker/image/overlay2/layerdb 存的只是元数据,那么真实的rootfs到底存在哪里呢?其中 cache-id 就是我们关键所在了。我们打印一下 /var/lib/docker/image/overlay2/layerdb/sha256/5dacd731af1b0386ead06c8b1feff9f65d9e0bdfec032d2cd0bc03690698feda/cache-id :
没错,这个id就是对应 /var/lib/docker/overlay2/dffe31c1db6055910b3cd49366a2989d9cd2f3460844437b2190de44807095fa 。因此,以此类推,更高一层的layer对应的cache-id也能找到对应的rootfs,当这些rootfs的diff目录通过联合挂载的方式挂载到某个目录,就能完整整个容器需要的rootfs了。
TCP/IP协议包含应用层、传输层、网络层和网络接口层。
TCP/IP协议四层参考模型是一个抽象的分层模型,这个模型中,所有的TCP/IP系列网络协定都归类到4个抽象的“层”中。每一抽象层建立在低一层提供的服务上,并且为高一层提供服务。 完成一些特定的任务需要众多的协定协同工作,这些协定分布在参考模型的不同层中的,因此有时称它们为一个协定叠。 TCP/IP协议参考模型为TCP/IP协定量订身制作。其中IP协定只关心如何使得数据能够跨越本地网络边界的问题,而不关心如何利用传输媒体,数据如何传输。
TCP/IP协议的起源
TCP/IP协议这个名称来源于其中两个最重要的协定:传输控制协定(TCP)和互联网协定(IP),它们也是最先定义的两个协定。 同许多其他协定一样网络传输协定也可以看作一个多层组合,每层解决数据传输中的一组问题并且向使用这些底层服务的高层提供定义好的服务。高层逻辑上与用户更为接近,所处理数据更为抽象,它们依赖于低层将数据转换成最终能够进行实体控制的形式。
以上就是关于Docker存储驱动之--overlay2全部的内容,包括:Docker存储驱动之--overlay2、TCP/ IP协议包含哪些层、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)