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目录图:

docker 导入vhdx docker vfs_docker



  • 位置:/var/lib/docker/overlay2
    其中的一些子目录:
    upper目录是容器的可写数据层。所有对容器的更改都是写到这个目录。
    merged目录是容器的挂载点。这是镜像”lowerdir”和容器“upperdir”的统一视图。任何对这个容器的修改将马上反映到这个目录。
    work目录是OverlayFS执行操作时所需的目录。如执行copy_up操作。