docker存储驱动graphdriver中的overlay2 fuse-overlayfs btrfs zfs devicemapper aufs vfs的区别

0    182    1

Tags:

👉 本文共约1969个字,系统预计阅读时间或需8分钟。

简介

在Docker中,graphdriver 是负责管理和存储容器镜像、容器文件系统以及相关数据的组件。不同的graphdriver 可以提供不同的文件系统和存储方式。以下是关于 Docker 中几种常见的 graphdriver 的区别:

  1. overlay2: Overlay2 是一个用于存储 Docker 镜像和容器文件系统的图层存储驱动。它基于 Linux 内核的 OverlayFS 文件系统,使用联合挂载技术将多个文件系统层叠在一起。它支持多层镜像构建,而且效率较高,因为只有变更的内容才会占用额外的磁盘空间。
  2. fuse-overlayfs: fuse-overlayfs 也是基于 OverlayFS 的一种图层存储驱动,不同的是它使用 FUSE(文件系统在用户空间)来实现,而不是直接依赖 Linux 内核的 OverlayFS。这意味着它可以在不同的 Linux 内核版本中使用,但相对而言可能会有一些性能损失,因为涉及到用户空间和内核空间之间的通信。
  3. btrfs: Btrfs(B-tree文件系统)是一个现代的复制文件系统,具有许多高级特性,如快照、克隆、压缩和RAID支持。Docker 可以使用 Btrfs 作为图层存储驱动,但由于其复杂性和一些稳定性问题,一般情况下不建议在生产环境中使用。
  4. zfs: ZFS 是一个高级的文件系统和逻辑卷管理器,支持快照、数据完整性校验和多种级别的数据冗余。与 Btrfs 类似,Docker 也可以使用 ZFS 作为图层存储驱动。ZFS 在数据保护方面非常强大,但也可能在某些方面对性能造成影响。
  5. devicemapper: Devicemapper 是一个 Linux 内核的块设备映射驱动,它可以被用作 Docker 的图层存储驱动。它支持基于块设备的数据存储,并且在某些情况下可以与 LVM(逻辑卷管理器)一起使用。然而,它相对复杂,性能可能不如 OverlayFS。
  6. vfs: VFS(Virtual File System)是一种简单的文件系统,是 Linux 内核的一部分。在 Docker 中,VFS 图层存储驱动只是将容器的文件直接映射到主机文件系统,而不会使用层叠的方式来构建镜像,因此效率较低,并且在性能和存储方面不适用于生产环境。
  7. aufs:在Ubuntu 14.04(内核3.13)上运行的Docker 18.06及更早版本的首选存储驱动程序。

选择适当的 graphdriver 取决于你的应用场景、性能需求、文件系统特性以及操作系统的支持情况。在生产环境中,通常会选择 Overlay2 或 fuse-overlayfs,因为它们在大多数情况下提供了良好的性能和稳定性。

1)overlay存储驱动程序已在Docker Engine-Enterprise 18.09中弃用,并将在以后的版本中删除。建议用户将overlay存储驱动程序迁移到overlay2。

2)devicemapper存储驱动程序已在Docker Engine 18.09中弃用,并将在以后的版本中删除。建议用户将devicemapper存储驱动程序迁移到overlay2。

3)如果可能,建议使用overlay2存储驱动程序。首次安装Docker时,默认使用overlay2存储驱动。

配套的后端文件系统

对于Docker来说,对应的文件系统为docker的根目录。一些存储驱动程序仅适用于特定的后端文件系统。具体对应关系请参考下表:

docker存储驱动graphdriver中的overlay2 fuse-overlayfs btrfs zfs devicemapper aufs vfs的区别

所以,对于docker中嵌套docker的graphdriver 只能选用vfs存储驱动。

若不支持,则通常会报错:

性能和稳定性考虑

性能考虑

每个存储驱动程序都有其自己的性能特征,这使其或多或少地适合于不同的工作负载。考虑以下概括:

  • overlay2aufsoverlay都是在文件级别而不是块级别运行的。这样可以更有效地使用内存,但是在写繁重的工作负载中,容器的可写层可能会变得非常大。
  • devicemapperbtrfszfs都是块存储驱动器,它们能够更好地承担写繁重的工作。
  • 对于许多小型写入或具有多层或深文件系统的容器, overlay的性能可能比overlay2更好。但会消耗更多的inode,这可能导致inode耗尽。
  • btrfszfs需要使用大量的内存。
  • zfs 对于高密度工作负载(如PaaS)是一个不错的选择。

稳定性考虑

对于某些用户而言,稳定性比性能更重要。尽管Docker认为这里提到的所有存储驱动程序都是稳定的,但其中一些是较新的并且仍在积极开发中。在一般情况下,overlay2,aufs,overlay和devicemapper是稳定性最高的选择。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
docker存储驱动graphdriver中的overlay2 fuse-overlayfs btrfs zfs devicemapper aufs vfs的区别后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章
验证码:
请关注本站微信公众号,回复“小麦苗博客”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部