5.4. 选择图形驱动程序
容器运行时将镜像和容器存储在图形驱动程序中(可插拔式存储技术),如 DeviceMapper 和 OverlayFS。它们都有各自的优缺点。
有关 OverlayFS 的详情请参考 Red Hat Enterprise Linux(RHEL)7 发行注记。
| 名称 | 描述 | 优点 | 限制: |
|---|---|---|---|
| OverlayFS
| 组合一个较低(父)和上层(子上)文件系统和工作目录(位于与子进程相同的文件系统上)。较低文件系统是基础镜像,当您创建新容器时,会创建一个包含 deltas 的新文件系统。 |
| 没有兼容 POSIX。 |
| 设备映射器精简调配 | 使用 LVM、设备映射器和 dm-thinp 内核模块。它与一个原始分区(没有文件系统)删除回环设备不同。 |
|
|
| 设备映射器 loop-lvm | 使用设备映射器精简配置模块(dm-thin-pool)实施写时复制(CoW)快照。对于每个设备映射器图形位置,基于两个块设备创建精简池,一个用于数据,另一个用于元数据。默认情况下,这些块设备是使用自动创建稀疏文件的环回挂载自动创建。 | 它开箱即用,因此对于原型制作和开发目的非常有用。 |
|
为了提高性能,红帽建议在设备映射器中使用 overlayFS 存储驱动程序。但是,如果您已在生产环境中使用设备映射器,红帽强烈建议您对容器镜像和容器根文件系统使用精简配置。否则,始终将 overlayfs2 用于 Docker 引擎,或将 overlayFS 用于 CRI-O。
使用循环设备可能会影响性能。虽然您仍可以继续使用它,但会记录以下警告信息:
devmapper: Usage of loopback devices is strongly discouraged for production use. Please use `--storage-opt dm.thinpooldev` or use `man docker` to refer to dm.thinpooldev section.
devmapper: Usage of loopback devices is strongly discouraged for production use.
Please use `--storage-opt dm.thinpooldev` or use `man docker` to refer to
dm.thinpooldev section.
要简化存储配置,请使用 docker-storage-setup 工具,它可以自动完成大部分配置详情:
对于 Overlay
编辑 /etc/sysconfig/docker-storage-setup 文件以指定设备驱动程序:
STORAGE_DRIVER=overlay2
STORAGE_DRIVER=overlay2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果使用 CRI-O,请指定
STORAGE_DRIVER=overlay。使用 CRI-O 时,默认的
overlay存储驱动程序使用overlay2优化。使用 OverlayFS,如果要在不同的逻辑卷上具有
imagefs,那么您必须设置CONTAINER_ROOT_LV_NAME和CONTAINER _ROOT_LV_MOUNT_PATH。设置CONTAINER_ROOT_LV_MOUNT_PATH需要设置CONTAINER_ROOT_LV_NAME。例如,CONTAINER_ROOT_LV_NAME="container-root-lv"。如需更多信息,请参阅使用 Overlay Graph Driver。如果您的独立磁盘驱动器有一个专用于 docker 存储(例如 /dev/xvdb)的磁盘驱动器,请将以下内容添加到 /etc/sysconfig/docker-storage-setup 文件中:
DEVS=/dev/xvdb VG=docker_vg
DEVS=/dev/xvdb VG=docker_vgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
docker-storage-setup服务:systemctl restart docker-storage-setup
# systemctl restart docker-storage-setupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要验证 docker 是否使用 overlay2,并监控磁盘空间使用情况,请运行
docker info命令:docker info | egrep -i 'storage|pool|space|filesystem'
# docker info | egrep -i 'storage|pool|space|filesystem'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Storage Driver: overlay2 Backing Filesystem: extfs
Storage Driver: overlay21 Backing Filesystem: extfsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 使用
overlay2时的docker info输出。
从 Red Hat Enterprise Linux 7.2 开始,OverlayFS 也支持容器运行时用例,并提供更快的启动时间和页面缓存共享,这可以通过降低总体内存使用率来更好地提高密度。
对于 Thinpool
编辑 /etc/sysconfig/docker-storage-setup 文件以指定设备驱动程序:
STORAGE_DRIVER=devicemapper
STORAGE_DRIVER=devicemapperCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的独立磁盘驱动器有一个专用于 docker 存储(例如 /dev/xvdb)的磁盘驱动器,请将以下内容添加到 /etc/sysconfig/docker-storage-setup 文件中:
DEVS=/dev/xvdb VG=docker_vg
DEVS=/dev/xvdb VG=docker_vgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
docker-storage-setup服务:systemctl restart docker-storage-setup
# systemctl restart docker-storage-setupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启后,
docker-storage-setup会设置名为docker_vg的卷组,并创建一个 thin-pool 逻辑卷。有关 RHEL 的精简配置的文档,请参考 LVM 管理员指南。使用lsblk命令查看新创建的卷:lsblk /dev/xvdb
# lsblk /dev/xvdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意精简配置的卷未挂载,也没有文件系统(individual 容器具有 XFS 文件系统),因此不会在
df输出中出现。要验证 docker 是否使用 LVM thinpool,并用于监控磁盘空间使用情况,请运行
docker info命令:docker info | egrep -i 'storage|pool|space|filesystem'
# docker info | egrep -i 'storage|pool|space|filesystem'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
默认情况下,精简池配置为使用基础块设备的 40%。当您使用存储时,LVM 会自动将精简池扩展到 100%。这就是为什么 Data Space Total 值与基础 LVM 设备的大小不匹配。
在开发中,红帽分发中的 docker 默认为环回挂载的稀疏文件。查看您的系统是否使用回环模式:
docker info|grep loop0
# docker info|grep loop0
输出示例
Data file: /dev/loop0
Data file: /dev/loop0
5.4.1. 在 SELinux 中使用 OverlayFS 或 DeviceMapper 的好处 复制链接链接已复制到粘贴板!
OverlayFS 图形的主要优点是 Linux 页面缓存在共享同一节点上的镜像的容器之间共享。OverlayFS 的此属性会导致在容器启动期间减少输入/输出(I/O),从而加快容器启动时间,同时减少类似镜像在节点上运行时的内存用量。这些结果在许多环境中都很有用,特别是那些针对密度优化且具有高容器数量率(如构建场)或镜像内容具有重大重叠的目标。
DeviceMapper 无法进行页面缓存共享,因为精简配置的设备会基于每个容器分配。
OverlayFS 是 Red Hat Enterprise Linux(RHEL)7.5 的默认 Docker 存储驱动程序,在 7.3 及更新的版本中被支持。将 OverlayFS 设置为 RHEL 上的默认 Docker 存储配置,以提高性能。有关配置 OverlayFS 以便与 Docker 容器运行时搭配使用的说明。