13) 如果之前Docker daemon被启动过,那么需要将之前的graph driver目录给挪走;
移动graph driver会删除所有的镜像容器和卷。下面的命令将/var/lib/docker的内容移动到另一个目录中。
14) 使用特殊的devicemapper选项来配置Docker daemon;
有两种方法来配置Docker daemon的devicemapper存储驱动。你可以运行daemon时加上以下参数:
也可以在daemon配置文件中配置,如默认的配置文件/etc/docker/daemon.json中,可如下配置:
{ "storage-driver": "devicemapper", "storage-opts": [ "dm.thinpooldev=/dev/mapper/docker-thinpool", "dm.use_deferred_removal=true", "dm.use_deferred_deletion=true" ] } 注意:总是使用dm.use_deferred_removal=true和dm.use_deferred_deletion=true选项,以防止无意地泄露映射资源信息。
15) (可选的)如果使用了systemd,并且修改了daemon配置文件,需要重载systemd信息;
16) 重启Docker daemon。
$ systemctl start docker 当你启动Docker daemon后,确保一直监控者thin池和卷组的可用空间。当卷组自动扩容时,可能会占满所有空间。可以使用lvs或lvs -a命令来监控逻辑卷,可以查看到数据和元数据的大小。另外,还可以使用vgs命令来监控卷组的可用空间。
当到达阈值后,日志会显示thin池的自动扩容信息,可使用以下命令来查看日志:
当你确认你的配置文件无误时,就可以删除之前的备份目录了。
$ rm -rf /var/lib/docker.bk你还可以使用dm.min_free_space参数。该值保证党可用空间到达或者接近最小值时,操作失败会有提示。可以。
检查devicemapper结构体可以通过lsblk命令查看devicemapper存储驱动创建的pool相关的设备文件。
$ sudo lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 G 0 disk └─xvda1 202:1 0 G 0 part / xvdf 202:80 0 0G 0 disk ├─vg--docker-data 253:0 0 0G 0 lvm │ └─docker-202:1-1032-pool 253:2 0 0G 0 dm └─vg--docker-metadata 253:1 0 G 0 lvm └─docker-202:1-1032-pool 253:2 0 0G 0 dm 下图显示了上面示例的镜像信息。
图中,pool的名称叫做Docker-202:1-1032-pool,横跨data和metadata两个设备。devicemapper的pool名称格式为: Docker-MAJ:MIN-INO-pool
MAJ,MIN和INFO分别表示major、minor设备号,和inode号。
有两个主要的目录。/var/lib/docker/devicemapper/mnt目录包含镜像和容器层的映射点。/var/lib/docker/devicemapper/metadata目录为每个镜像层和容器快照都对应了一个文件,文件以JSON格式保存每个快照的元数据。
理解按需分配和copy-on-write可以让你对容器性能有个整体的了解。
按需分配性能影响 devicemapper存储驱动在按需分配操作时会给容器分配一个新的块。也就是说每次应用向容器某个位置写数据时,一个或多个块就会从池里面分配,并且映射给容器。
所有的块都是64KB大小,一个小于64KB的写请求也会导致分配64KB的块,大于64KB的写请求就要求多个64KB的块。这会影响容器的性能,尤其容器有很多小的写请求时。然而,一旦一个块分配给容器后,后续的读写都会直接操作这个新分配的块。