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=overlay2
Copy 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_vg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
docker-storage-setup
服务:systemctl restart docker-storage-setup
# systemctl restart docker-storage-setup
Copy 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: overlay2
1 Backing Filesystem: extfs
Copy 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=devicemapper
Copy 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_vg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
docker-storage-setup
服务:systemctl restart docker-storage-setup
# systemctl restart docker-storage-setup
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启后,
docker-storage-setup
会设置名为docker_vg
的卷组,并创建一个 thin-pool 逻辑卷。有关 RHEL 的精简配置的文档,请参考 LVM 管理员指南。使用lsblk
命令查看新创建的卷:lsblk /dev/xvdb
# lsblk /dev/xvdb
Copy 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 容器运行时搭配使用的说明。