Instead of Docker using devicemapper files which are loop mounted in /var/lib/docker/devicemapper/devicemapper/ we will setup real Logical Volumes (LVs) inside our existing LVM2 Volume Group (VG).
We do this by first creating two LVs
I chose 200GB for data and metadata is 5% of that at 10GB
$ sudo /sbin/lvcreate --wipesignatures y -n data direct-lvm -L 200G
Logical volume "data" created
$ sudo /sbin/lvcreate --wipesignatures y -n metadata direct-lvm -L 10G
Logical volume "metadata" created
Its best to blank the start of the metadata area:
$ sudo dd if=/dev/zero of=/dev/data/metadata bs=1M count=10 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 0.901407 s, 11.6 MB/s
Be sure docker is stopped:
sudo /etc/rc.d/docker stop
Now edit /etc/docker.conf and add:
--storage-opt dm.datadev=/dev/direct-lvm/data --storage-opt dm.metadatadev=/dev/direct-lvm/metadata
To DOCKER_OPTS
Be sure to remove the old storage, especially json.migrated, else you will get errors and docker will not start.
$ rm /var/lib/docker/devicemapper/devicemapper/{data,metadata,json.migrated}
Now start docker: $ sudo /etc/rc.d/docer start