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