本文只介绍Device mapper direct-lvm模式的配置,关于容器的其他知识在后续博客中会有介绍。

以下过程将创建配置为thin pool的logical volume,以用作存储池的备份。 现在假定在/dev/sda3上有一个备用块设备,并具有足够的可用空间来完成任务。该过程还假定Docker守护进程处于stopped状态。

1. 确定要使用的块设备

确保/dev/sda3有足够的空闲空间,同时确认/dev/sda3是空闲分区。

2. Stop Docker

systemctl stop docker

且需要删除所有镜像和容器,有重要资料,请做好备份:
rm -rf /var/lib/docker/*

3. 创建 physical volume

pvcreate /dev/sda3

4. 创建docker volume group

vgcreate docker /dev/sda3

5. 创建能够组成thin-pool的两个logical volume

lvcreate --wipesignatures y -n thinpool docker -l 95%VG

lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG

6. 创建thin-pool

lvconvert -y --zero n -c 64K --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta

7. 配置thin-pool的自动扩展

修改lvm配置文件
vim /etc/lvm/profile/docker-thinpool.profile
内容如下:

1
2
3
4
activation{
thin_pool_autoextend_threshold=80
thin_pool_autoextend_percent=20
}

8. 激活配置文件

lvchange --metadataprofiledocker-thinpool docker/thinpool

9. 启用对主机上 logical volume的监视

lvs -o+seg_monitor

10. 使用脚本配置devicemapper storage driver

vim /etc/docker/daemon.json

内容如下:

1
2
3
4
5
6
7
8
9
{
"storage-driver": "devicemapper",
"storage-opts": [
"dm.thinpooldev=/dev/mapper/docker-thinpool",
"dm.use_deferred_removal=true",
"dm.use_deferred_deletion=true",
"dm.fs=ext4"
]
}

11. 开启Docker

service docker start

12. 验证Docker是否正在使用新的配置

docker info

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.03.1-ce
Storage Driver: devicemapper
Pool Name: docker-thinpool
Pool Blocksize: 524.3 kB
Base Device Size: 10.74 GB
Backing Filesystem: ext4
Data file:
Metadata file:
Data Space Used: 19.92 MB
Data Space Total: 102 GB
Data Space Available: 102 GB
Metadata Space Used: 147.5 kB
Metadata Space Total: 1.07 GB
Metadata Space Available: 1.069 GB
Thin Pool Minimum Free Space: 10.2 GB
Udev Sync Supported: true
Deferred Removal Enabled: true
Deferred Deletion Enabled: true
Deferred Deleted Device Count: 0
Library Version: 1.02.135-RHEL7 (2016-11-16)

如果Docker配置正确,Data file和Metadata file将是空白的,pool name将是docker-thinpool。
如果显示不对,重启主机后再测试。


参考资料:

  1. Use the Device mapper storage driver
  2. Devicemapper的direct-lvm模式