8. Configure autoextension of thin pools via an `lvm` profile.
```console
$ sudo vi /etc/lvm/profile/docker-thinpool.profile
```
9. Specify `thin_pool_autoextend_threshold` and `thin_pool_autoextend_percent`
values.
`thin_pool_autoextend_threshold` is the percentage of space used before `lvm`
attempts to autoextend the available space (100 = disabled, not recommended).
`thin_pool_autoextend_percent` is the amount of space to add to the device
when automatically extending (0 = disabled).
The example below adds 20% more capacity when the disk usage reaches
80%.
```none
activation {
thin_pool_autoextend_threshold=80
thin_pool_autoextend_percent=20
}
```
Save the file.
10. Apply the LVM profile, using the `lvchange` command.
```console
$ sudo lvchange --metadataprofile docker-thinpool docker/thinpool
Logical volume docker/thinpool changed.
```
11. Ensure monitoring of the logical volume is enabled.
```console
$ sudo lvs -o+seg_monitor
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Monitor
thinpool docker twi-a-t--- 95.00g 0.00 0.01 not monitored
```
If the output in the `Monitor` column reports, as above, that the volume is
`not monitored`, then monitoring needs to be explicitly enabled. Without
this step, automatic extension of the logical volume will not occur,
regardless of any settings in the applied profile.
```console
$ sudo lvchange --monitor y docker/thinpool
```
Double check that monitoring is now enabled by running the
`sudo lvs -o+seg_monitor` command a second time. The `Monitor` column
should now report the logical volume is being `monitored`.
12. If you have ever run Docker on this host before, or if `/var/lib/docker/`
exists, move it out of the way so that Docker can use the new LVM pool to
store the contents of image and containers.
```console
$ sudo su -
# mkdir /var/lib/docker.bk
# mv /var/lib/docker/* /var/lib/docker.bk
# exit
```
If any of the following steps fail and you need to restore, you can remove
`/var/lib/docker` and replace it with `/var/lib/docker.bk`.
13. Edit `/etc/docker/daemon.json` and configure the options needed for the
`devicemapper` storage driver. If the file was previously empty, it should
now contain the following contents:
```json
{
"storage-driver": "devicemapper",
"storage-opts": [
"dm.thinpooldev=/dev/mapper/docker-thinpool",
"dm.use_deferred_removal=true",
"dm.use_deferred_deletion=true"
]
}
```
14. Start Docker.
**systemd**:
```console
$ sudo systemctl start docker
```
**service**:
```console
$ sudo service docker start
```
15. Verify that Docker is using the new configuration using `docker info`.
```console
$ docker info
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: xfs
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)
<...>
```
If Docker is configured correctly, the `Data file` and `Metadata file` is
blank, and the pool name is `docker-thinpool`.
16. After you have verified that the configuration is correct, you can remove the
`/var/lib/docker.bk` directory which contains the previous configuration.