Docker存储资源
Docker为容器提供了两种存放数据的资源
1.由storage driver 管理的镜像层和容器层
2.Data Volume
1 Storage Driver
docker支持storage driver,有 AUFS、Device Mapper、Btrfs、OverlayFS、VFS 和 ZFS。它们都能实现分层的架构,同时又有各自的特性。
运行docker info查看的默认 driver:
Server Version: 20.10.7
Storage Driver: overlay2
Backing Filesystem: extfs
Ubuntu 用的 AUFS,底层文件系统是 extfs,各层数据存放在 /var/lib/docker/aufs。
Redhat/CentOS 的默认 driver 是 Device Mapper
SUSE 则是 Btrfs。
存储驱动程序分类:
1、AUFS (advanced multi-layered unification filesystem)
2、Btrfs (通常念成 Butter FS,Better FS或B-tree FS)
3、Device mapper
4、OverlayFS
5、ZFS (Zettabyte File System)又名(Dynamic File System)
6、VFS (virtual File System)
存储驱动程序如何选择
- aufs,overlay和overlay2全部在文件级而不是块级操作,这能更有效地使用内存。但容器的可写层在大文件读写时,容器会变大。
- 块级存储驱动程序(如devicemapper,btrfs和zfs)更适合写入繁重的工作场景(虽然不如Docker卷)。
- 对于一些写小文件频繁或者具有许多图层的容器或深层文件系统,overlay可能会比overlay2更优秀。
- 使用 btrfs 和 zfs 需要大量的内存。 zfs 对于Paas等高密度工作负载来说是一个不错的选择。
推荐选择顺序
overlay2是优选的,随后是overlay。这2个都不需要额外的配置。overlay2是Docker CE的默认选择。
device mapper是下一个选择,但因为需要在生产环境中使用直接的LVM,LVM零配置,所有性能非常差。
在一般情况下,aufs,overlay,和 devicemapper 稳定性最高。
如果你使用RHEL或其下游分支,而且你已经有LVM的使用经验。device mapper驱动可能是最好的选择。
OverlayFS
OverlayFS是与AUFS类似的联合文件系统,但速度更快,实现更简单。
Docker为OverlayFS提供了两个存储驱动程序:
原始的overlay
更新和更稳定的overlay2。
注意:如果您使用OverlayFS,请使用Overlay2驱动程序,因为它在inode利用率方面效率更高。
支持OverlayFS的条件
1 overlay2驱动程序支持docker EE,推荐使用docker CE
2 overlay驱动程序允许但不推荐使用docker CE
3 使用4.0或更高的Linux内核,或者RHEL或centos使用3.10-693的内核或更高版本。
支持以下文件系统:
ext4仅限RHEL7.1
xfs(RHEL 7.2或更高版本),但仅限于 d_type=true 启用。要正确格式化 xfs 文件系统,请使用该选项 -n ftype=1。
注意:更改存储驱动程序会使已创建的任何容器在本地系统上都无法访问。使用docker save保存的容器无需重建它们。
overlay2的驱动过程: - overlay FS将当个Linux主机上的两个目录分层并呈现为单个目录,这些目录称为图层,同一过程叫联合挂载。
- overlay将底层的目录叫lowerdir,生成目录成为upperdir,通过这些目录公开为一个视图就叫merged.
- overlay仅仅支持驱动当个lower,overlayFS需要硬链接实现多层的镜像,而voerlay2支持驱动多个lower
overlayFS层,(最大到128层)。
所以overlay2驱动与层相关的docke build 和docker commit 提供了更好的性能,并且消耗更好的inodes。
OVERLAYFS目录图:
位置:/var/lib/docker/overlay2
其中的一些子目录:
upper目录是容器的可写数据层。所有对容器的更改都是写到这个目录。
merged目录是容器的挂载点。这是镜像”lowerdir”和容器“upperdir”的统一视图。任何对这个容器的修改将马上反映到这个目录。
work目录是OverlayFS执行操作时所需的目录。如执行copy_up操作。