centos7配置docker后端文件系统位direct-lvm

在早一些的centos版本中,docker 默认是使用 loop-lvm挂载docker相关的文件,这种方式性能差且不适合生产环境,在本文中,讲述的是手工配置docker的storeage driver的方法。请注意,以下操作会干掉你的全部镜像和全部容器

前提

首先确认,当前docker运行的环境。在shell输入

docker info

如果看到 Data file: /dev/loop0 字样,就说明需要调整。

较早的版本(1.13)的storage driver特性图
较早的版本(1.13)的storage driver特性图

而在新版本中,则是推荐使用overlay2(如果是红帽系列,注意检查自己的xfs文件系统d_type选项)

修改配置

如果你的机器没有配置lvm,没有vg,需要先新建vg,如果已经有了,则将现有的volume group扩容,在下面的脚本中, /dev/sdb是我信硬盘,vg_sys是我原来lvm的volume group 名字

vg扩容

1
2
pvcreate /dev/sdb
vgextend vg_sys /dev/sdb

禁用docker-storage-setup.service 服务

1
systemctl mask docker-storage-setup.service

创建 lv

1
2
3
4
5
6
7
8
9
10
11
12

vgdisplay

lvcreate --wipesignatures y -n thinpool vg_sys --size 90G

lvdisplay

lvcreate --wipesignatures y -n thinpoolmeta vg_sys --size 2G

vgdisplay

lvconvert -y --zero n -c 512K --thinpool vg_sys/thinpool --poolmetadata vg_sys/thinpoolmeta

应用lv设置

1
2
3
4
5
6
7
8
9
cat  <<EOF  > /etc/lvm/profile/vg_sys-thinpool.profile
activation {
thin_pool_autoextend_threshold=80
thin_pool_autoextend_percent=20
}
EOF


lvchange --metadataprofile vg_sys-thinpool vg_sys/thinpool

修改docker启动参数

1
2
3
4
5
6
7
8
9
10
11
cat  <<EOF  >/etc/docker/daemon.json

{
"insecure-registries" : ["10.168.136.193:5000"],
"storage-driver": "devicemapper",
"storage-opts": [
"dm.thinpooldev=vg_sys-thinpool",
"dm.use_deferred_removal=true",
"dm.use_deferred_deletion=true"
]
}

/usr/lib/systemd/system/docker.service
注释掉

#wants=docker-storage-setup.service

修改/etc/sysconfig/docker-storage,因为存储的配置我们放到json里去了

DOCKER_STORAGE_OPTIONS=””

数据移走,如果配置有问题,则把上面的daemon.json回复原状,把文件在弄回来

1
2
$ mkdir /var/lib/docker.bk
$ mv /var/lib/docker/* /var/lib/docker.bk

启动docker

systemctl start docker