互联网技术 / 互联网资讯 · 2024年1月3日

Docker中device mapper存储驱动的配置与使用

Device Mapper 是 Linux 内核中的一套块设备映射框架,也是许多高级卷管理能力的基础。Docker 的 device mapper 存储驱动正是基于这套机制,利用精简配置与快照能力来管理镜像和容器。

与基于文件系统层工作的存储方式不同,device mapper 直接在块级别运行,并使用专门分配给 Docker 的块设备来存储数据。因此,这种方式通常比在操作系统文件系统之上进行文件级操作更高效,也可以通过为主机增加物理存储来扩展容量。

在支持 device mapper 的系统中,Linux 内核通常已经具备相关能力,但若要配合 Docker 使用,仍然需要额外的配置和依赖组件。

适用环境与依赖

device mapper 存储驱动可用于运行 Docker Engine 的多种 Linux 发行版环境,例如 CentOS、Fedora、Ubuntu 和 Debian。

在使用前,需要先安装以下软件包:

  • lvm2
  • device-mapper-persistent-data

另外需要注意,切换 Docker 存储驱动后,系统中此前已创建的本地容器和镜像将无法继续直接访问。为了避免数据丢失,建议提前做好备份,例如使用 docker save 导出镜像,或将现有镜像推送到 Docker Hub 或私有镜像仓库。

测试环境下配置 device mapper

下面介绍的是用于测试的 loop-lvm 模式配置方法。这种模式通过“回环设备”机制,把本地磁盘上的普通文件模拟成块设备来使用。

虽然 loop-lvm 配置简单,适合验证环境是否具备基础依赖,例如内核支持、用户空间工具是否齐全等,但它并不适合生产环境。原因在于回环设备会额外经过文件系统层,IO 开销较大,性能较差,还可能引入竞争条件。

因此,loop-lvm 更适合作为排查和验证用途。在正式生产环境中,应使用 direct-lvm 模式。

配置步骤

在开始之前,请先确认系统已经满足所需前提条件,并已安装必要依赖。

1. 停止 Docker 服务

$ sudo systemctl stop docker

2. 编辑 /etc/docker/daemon.json

如果该文件不存在,可以直接创建。假设文件当前为空,可写入以下内容:

{

  “storage-driver”: “devicemapper”

}

需要特别注意,daemon.json 必须是合法的 JSON 格式,否则 Docker 将无法正常启动。

3. 启动 Docker 服务

$ sudo systemctl start docker

4. 验证当前存储驱动

执行 docker info,确认 Storage Driver 已切换为 devicemapper:

$ docker info

Containers: 0

Running: 0

Paused: 0

Stopped: 0

Images: 0

Server Version: 17.03.1-ce

Storage Driver: devicemapper

Pool Name: docker-202:1-8413957-pool

Pool Blocksize: 65.54 kB

Base Device Size: 10.74 GB

Backing filesystem: xfs

Data file: /dev/loop0

Metadata file: /dev/loop1

Data space used: 11.8 MB

Data space total: 107.4 GB

Data space available: 7.44 GB

Metadata space used: 581.6 KB

Metadata space total: 2.147 GB

Metadata space available: 2.147 GB

Thin Pool minimum free space: 10.74 GB

Udev Sync supported: true

Deferred Removal Enabled: false

Deferred Deletion Enabled: false

Deferred Deleted Device Count: 0

Data loop file: /var/lib/docker/devicemapper/data

Metadata loop file: /var/lib/docker/devicemapper/metadata

Library Version: 1.02.135-RHEL7 (2016-11-16)

如何判断是否处于 loop-lvm 模式

如果在 docker info 的输出中看到 Data loop file 和 Metadata loop file,并且它们位于 /var/lib/docker/devicemapper/ 目录下,就说明当前系统使用的是 loop-lvm 模式。这里的文件本质上是通过回环方式挂载的稀疏文件,而不是真正的物理块设备。

再次强调,这种模式仅适合测试和基础验证,不建议用于生产环境。若要在正式业务场景中使用 device mapper,应进一步配置 direct-lvm 模式,以获得更稳定的性能和更可靠的行为。