15.overlay和overlay2对比介绍

关于OverlayFS的镜像分层与共享,先说几个重要的结论

1.overlay驱动只能工作在两层之上。也就是说多层镜像不能用多层OverlayFS实现。替代的,每个镜像层在/var/lib/docker/overlay中用自己的目录来实现,使用硬链接这种有效利用空间的方法,来引用底层分享的数据。注意:Docker1.10之后,镜像层ID和/var/lib/docker中的目录名不再一一对应。

2.overlay驱动只工作在一个lower OverlayFS层之上,因此需要硬链接来实现多层镜像

$ mount | grep overlay

overlay on /var/lib/docker/overlay/ec444863a55a.../merged
type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay/55f1e14c361b.../root,
upperdir=/var/lib/docker/overlay/ec444863a55a.../upper,
workdir=/var/lib/docker/overlay/ec444863a55a.../work)

3.但overlay2驱动原生地支持多层lower OverlayFS镜像(最多128层)

$ mount | grep overlay

overlay on /var/lib/docker/overlay2/9186877cdf386d0a3b016149cf30c208f326dca307529e646afce5b3f83f5304/merged
type overlay (rw,relatime,
lowerdir=l/DJA75GUWHWG7EWICFYX54FIOVT:l/B3WWEFKBG3PLLV737KZFIASSW7:l/JEYMODZYFCZFYSDABYXD5MF6YO:l/UL2MW33MSE3Q5VYIKBRN4ZAGQP:l/NFYKDW6APBCCUCTOUSYDH4DXAT:l/6Y5IM2XC7TSNIJZZFLJCS6I4I4,
upperdir=9186877cdf386d0a3b016149cf30c208f326dca307529e646afce5b3f83f5304/diff,
workdir=9186877cdf386d0a3b016149cf30c208f326dca307529e646afce5b3f83f5304/work)

4.本质区别是镜像层之间共享数据的方法不同

overlay共享数据方式是通过硬连接
而overlay2是通过每层的 lower文件

5.overlay2中link文件描述了该层标识符的精简版,在overlay2每层的内容都是不一样的,diff是文件系统的统一挂载点,link文件描述的是该层的标识符,lower文件描述了层与层之间的组织关系,overlay2是将底层多个lowerdir和upperdir和workdir联合挂载,形成最终的merged挂载点。

6.overlay2为什么比overlay不消耗inode,根本原因在于那些文件夹,每层的root目录内存放的都是完整的rootfs文件夹,但它们都是新建出来
的,它们inode都不一样,所以在overlay下一个容器镜像层数越多,占用的inode就越多 参考:https://www.bladewan.com/2018/01/25/docker_storage_driver/

参考:

https://arkingc.github.io/2017/05/05/2017-05-05-docker-filesystem-overlay/

https://blog.csdn.net/styshoo/article/details/60715942

https://www.cnblogs.com/iiiiher/p/8037719.html

https://zhuanlan.zhihu.com/p/41958018

https://www.cnblogs.com/elnino/p/11015076.html

https://www.bbsmax.com/A/obzb0ND65E/

原文地址:https://www.cnblogs.com/robinunix/p/12157910.html