Docker 的 Ovrlay2 驱动介绍

简介: OverlayFS是一种和AUFS很类似的文件系统,与AUFS相比,OverlayFS有以下特性:

Docker 的 Ovrlay2驱动


简介


OverlayFS是一种和AUFS很类似的文件系统,与AUFS相比,OverlayFS有以下特性:


  • 更简单地设计


  • 从3.18开始,就进入了Linux内核主线


  • 可能更快一些


下图是一个docker镜像和docke容器的分层图,docker镜像是lowdir,docker容器是upperdir。而统一的视图层是merged层


image.png


容器使用overlay读写


有三种场景,容器会通过overlay只读访问文件。


  • 容器层不存在的文件。如果容器只读打开一个文件,但该容器不在容器层(upperdir),就要从镜像层(lowerdir)中读取。这会引起很小的性能损耗。


  • 只存在于容器层的文件。如果容器只读权限打开一个文件,并且容器只存在于容器层(upperdir)而不是镜像层(lowerdir),那么直接从镜像层读取文件,无额外性能损耗。


  • 文件同时存在于容器层和镜像层。那么会读取容器层的文件,因为容器层(upperdir)隐藏了镜像层(lowerdir)的同名文件。因此,也没有额外的性能损耗。


  • 有以下场景容器修改文件。


  • 第一次写一个文件。容器第一次写一个已经存在的文件,容器层不存在这个文件。overlay/overlay2驱动执行copy-up操作,将文件从镜像层拷贝到容器层。然后容器修改容器层新拷贝的文件。


  • 然而,OverlayFS工作在文件级别而不是块级别。也就是说所有的OverlayFS的copy-up操作都会拷贝整个文件,即使文件非常大但却只修改了一小部分,这在容器写性能上有着显著的影响。不过,有两个方面值得注意:


  • copy-up操作只发生在第一次写文件时。后续的对同一个文件的写操作都是直接针对拷贝到容器层的那个新文件。
  • OverlayFS只工作在两层中。这比AUFS要在多层镜像中查找时性能要好。


  • 删除文件和目录。删除文件时,容器会在镜像层创建一个whiteout文件,而镜像层的文件并没有删除。但是,whiteout文件会隐藏它。


  • 容器中删除一个目录,容器层会创建一个不透明目录。这和whiteout文件隐藏镜像层的文件类似。


  • 重命名目录。只有在源路径和目的路径都在顶层容器层时,才允许执行rename操作。否则,会返回EXDEV。 因此,你的应用需要能够处理EXDEV,并且回滚操作,执行替代的“拷贝和删除”策略。


参考资料






相关文章
|
10月前
|
存储 边缘计算 数据管理
Docker 存储驱动解析:选择最适合你的存储方案,优化容器化部署性能和数据管理
Docker 存储驱动解析:选择最适合你的存储方案,优化容器化部署性能和数据管理
286 0
|
9月前
|
边缘计算 持续交付 数据中心
Docker在边缘计算中的崭露头角:探索容器技术如何驱动边缘计算的新浪潮
边缘计算是一项快速发展的技术,它旨在将计算能力更接近数据源和终端用户,以提供低延迟、高性能的计算体验。在这个充满活力的领域,Docker容器技术崭露头角,成为推动边缘计算革新的一股新力量。本文将深入探讨Docker在边缘计算中的应用,介绍其优势和挑战,并穿插一些示例代码,以帮助读者更好地理解这一新兴趋势。 第一部分:边缘计算和Docker容器 边缘计算的定义 边缘计算是一种计算范式,它将计算资源和数据处理能力推向网络边缘,靠近数据源和终端用户。这与传统的集中式云计算模型形成鲜明对比,后者将大部分计算任务集中在中央数据中心。边缘计算的关键目标是减少数据传输的延迟,提高响应速度,以满足对实时性要
351 0
|
8月前
|
开发工具 Docker 异构计算
ubuntu18 安装 gpu 和 docker 驱动
ubuntu18 安装 gpu 和 docker 驱动
139 0
|
10月前
|
存储 Linux Go
Docker 存储驱动解析:选择最适合你的存储方案
Docker 存储驱动解析:选择最适合你的存储方案
171 0
|
存储 Ubuntu Linux
docker文件存储驱动:AUFS 文件系统原理及生产环境的最佳配置
docker文件存储驱动:AUFS 文件系统原理及生产环境的最佳配置
219 0
|
存储 Ubuntu Linux
Docker存储驱动与套接字简介
Docker存储驱动与套接字简介
154 1
Docker存储驱动与套接字简介
|
JSON Kubernetes 监控
更换docker日志驱动
本文是关于docker日志第三篇,更换docker日志驱动为-syslog。在之前的两篇文章: Docker容器日志分析介绍过docker的json日志滚动策略; fluentd收集kubernetes 集群日志分析分析kubernetes中fluentd收集docke容器日志原理。
358 0
|
存储 Docker 容器
Docker aufs 存储驱动
Docker aufs 存储驱动
83 0