docker使用lvm卷存储镜像

centos上安装的docker使用的后端存储为device-mapper(docker1.13为overlay),默认使用loopback的文件设备作为存储,在生产环节不推荐此种用法,需使用lvm卷作为docker后端存储,用以存放镜像及容器(容器与镜像的关系理解不同说法不同,作者这里为方便理解分开描述)的数据和元数据。下面是典型的docker存储示意图。

docker使用lvm卷存储镜像_第1张图片

docker官方手册里明确提到用lvm块设备存储时推荐使用thinpool设备:

To  make  the  best  use of Docker with the devicemapper backend, you must have a recent version of LVM.  Use lvm to create a thin pool.

关于thinpool设备的介绍可参考http://man7.org/linux/man-pages/man7/lvmthin.7.html

要使用lvm卷来作为docker存储,这需要在环境上用lvm创建一个thin pool,操作如下:

lvcreate -n pool0 -L 100G vgdocker 用于存储数据

lvcreate-n pool0meta -L 5G vgdocker 用于存储元数据

vgdocker为单独创建的卷组,也可以使用已有的卷组,但要保证有足够空间

lvconvert --type thin-pool --poolmetadatavgdocker/pool0meta vgdocker/pool0 创建thin-pool(将两个lvm卷合并为thinpool,名字为第一个lvm卷的名字)

创建完的thin-pool会隐藏数据和元数据的存储卷,thin-pool的名字为数据卷的名字

[root@centos-78 ~]# lvs

LV    VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log

 root   cl      -wi-ao----  46.99g                                                   

 swap  cl       -wi-ao----   2.00g                                                   

  pool0 vgdocker  twi-a-tz-- 100.00g             0.00   0.03 

使用lvs -a能看到隐藏的卷:

[root@centos-78 ~]# lvs -a

  LV              VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log root             cl      -wi-ao----  46.99g                                                   

 swap            cl       -wi-ao----   2.00g                                                    

 [lvol0_pmspare]  vgdocker   ewi-------  2.00g                                                   

 pool0           vgdocker  twi-a-tz--   100.00g             0.00   0.03                           

 [pool0_tdata]    vgdocker  Twi-ao----   100.00g                                                   

  [pool0_tmeta]    vgdocker ewi-ao----   2.00g

配置docker使用thin-pool

1.systemctl stop docker

2.rm -rf /var/lib/docker/ 会删除docker镜像,需提前备份

3.vi /usr/lib/systemd/system/docker.service

 ExecStart=/usr/bin/dockerd --storage-optdm.thinpooldev=/dev/mapper/vgdocker-pool0

4.systemctl daemon-reload

5.systemctl restart docker

6.docker info查看是否使用thin pool

[root@centos-78 ~]# docker info

Containers: 0

 Running: 0

 Paused: 0

 Stopped: 0

Images: 2

Server Version: 1.12.6

Storage Driver: devicemapper

Pool Name: vgdocker-pool0


扩容

1.      手动扩容:

vgdocker空间充足的情况下(可以先扩vg:vgextend),直接执行如下命令进行扩容:

lvextend -L 102G /dev/mapper/vgdocker-pool0

lvextend -L 5G/dev/mapper/vgdocker-pool0_tmeta

然后重启下docker服务即可,还有一种自动扩容的配置,需要配置一些动作及扩容阈值等,

/etc/lvm/profile/docker-thinpool.profile

感兴趣可以查下相关资料。


你可能感兴趣的:(docker使用lvm卷存储镜像)