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.
要简化存储配置,请使用 docker-storage-setup
工具,它可以自动完成大部分配置详情:
对于 Overlay
编辑 /etc/sysconfig/docker-storage-setup 文件以指定设备驱动程序:
STORAGE_DRIVER=overlay2
注意如果使用 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
重启
docker-storage-setup
服务:# systemctl restart docker-storage-setup
要验证 docker 是否使用 overlay2,并监控磁盘空间使用情况,请运行
docker info
命令:# docker info | egrep -i 'storage|pool|space|filesystem'
输出示例
Storage Driver: overlay2 1 Backing Filesystem: extfs
- 1
- 使用
overlay2
时的docker info
输出。
从 Red Hat Enterprise Linux 7.2 开始,OverlayFS 也支持容器运行时用例,并提供更快的启动时间和页面缓存共享,这可以通过降低总体内存使用率来更好地提高密度。
对于 Thinpool
编辑 /etc/sysconfig/docker-storage-setup 文件以指定设备驱动程序:
STORAGE_DRIVER=devicemapper
如果您的独立磁盘驱动器有一个专用于 docker 存储(例如 /dev/xvdb)的磁盘驱动器,请将以下内容添加到 /etc/sysconfig/docker-storage-setup 文件中:
DEVS=/dev/xvdb VG=docker_vg
重启
docker-storage-setup
服务:# systemctl restart docker-storage-setup
重启后,
docker-storage-setup
会设置名为docker_vg
的卷组,并创建一个 thin-pool 逻辑卷。有关 RHEL 的精简配置的文档,请参考 LVM 管理员指南。使用lsblk
命令查看新创建的卷:# lsblk /dev/xvdb
输出示例
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvdb 202:16 0 20G 0 disk └─xvdb1 202:17 0 10G 0 part ├─docker_vg-docker--pool_tmeta 253:0 0 12M 0 lvm │ └─docker_vg-docker--pool 253:2 0 6.9G 0 lvm └─docker_vg-docker--pool_tdata 253:1 0 6.9G 0 lvm └─docker_vg-docker--pool 253:2 0 6.9G 0 lvm
注意精简配置的卷未挂载,也没有文件系统(individual 容器具有 XFS 文件系统),因此不会在
df
输出中出现。要验证 docker 是否使用 LVM thinpool,并用于监控磁盘空间使用情况,请运行
docker info
命令:# docker info | egrep -i 'storage|pool|space|filesystem'
输出示例
Storage Driver: devicemapper 1 Pool Name: docker_vg-docker--pool 2 Pool Blocksize: 524.3 kB Backing Filesystem: xfs Data Space Used: 62.39 MB Data Space Total: 6.434 GB Data Space Available: 6.372 GB Metadata Space Used: 40.96 kB Metadata Space Total: 16.78 MB Metadata Space Available: 16.74 MB
默认情况下,精简池配置为使用基础块设备的 40%。当您使用存储时,LVM 会自动将精简池扩展到 100%。这就是为什么 Data Space Total
值与基础 LVM 设备的大小不匹配。
在开发中,红帽分发中的 docker 默认为环回挂载的稀疏文件。查看您的系统是否使用回环模式:
# docker info|grep 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 容器运行时搭配使用的说明。