在Linux环境中,Docker守护进程支持多种镜像层存储驱动程序,包括aufs、deviceMapper、btrfs、zfs、Overlay、Overlay2以及fuse-overlayfs。
作为最早的驱动程序,aufs基于Linux内核的补丁集,其合并到主内核的可能性较小,并且已知会引发严重的内核崩溃。然而,aufs允许多个容器共享可执行文件和共享库内存,这使其在运行数以千计的相同程序或库的容器时尤为实用。
deviceMapper驱动程序采用自动精简配置和写时拷贝(Copy-on-Write)快照机制。通常,它会在 /var/lib/docker/deviceMapper 目录下为每个deviceMapper图形位置基于两个块设备创建一个精简池,一个用于存储数据,另一个用于存储元数据。
默认情况下,这些块设备通过环回安装使用自动创建的稀疏文件来生成。有关如何自定义此设置的详细信息,请参见下面的DeviceMapper选项。
btrfs驱动程序在执行docker build时表现出色,但与deviceMapper一样,它在设备间不共享可执行内存。使用命令dockerd -s btrfs -g /mnt/btrfs_partition可以启用此驱动程序。
虽然zfs驱动程序的速度可能不及btrfs,但其在稳定性方面的记录更加悠久。通过Single Copy ARC,克隆之间的块只会被缓存一次。可以使用dockerd -s zfs来启用zfs,并根据ZFS options中的说明选择不同的zfs文件系统集选项。
Overlay是一个非常快速的联合文件系统,自3.18.0版本开始已合并到主Linux内核中。它支持页面缓存共享,这意味着多个容器可以共享同一文件的一个(或多个)页面缓存条目,从而使Overlay的内存使用效率与aufs驱动程序相当。可以通过dockerd -s Overlay命令来使用它。
Overlay2驱动程序同样利用快速的联合文件系统,并利用Linux内核4.0中新增的特性来减少inode的过度消耗。
fuse-overlayfs驱动程序与Overlay2类似,但在用户空间中运行,适用于无根模式。
在Windows环境中,Docker守护进程根据映像平台支持单一的映像层存储驱动程序:Windowsfilter用于Windows映像,而lcow则用于Windows上的Linux容器。
