【Linux系统查看docker当前的存储驱动类型】$ docker system info
【Linux系统】上docker可选择的存储驱动包括:AUFS(最老最原始)、Overlay2(可能是未来最优选择)、DeviceMapper、Btrfs、ZFS
【给docker环境选择合适的存储驱动】
1、Red Hat Enterprise Linux:4.x版本内核活着更高版本 + docker 17.06版本或者更高的版本建议使用Overlay2。
2、Red Hat Enterprise Linux:低版本内核或者低版本的Docker,建议使用Device Mapper。
3、Ubuntu Linux:4.x版本内核或者更高版本,建议使用Overlay2。
4、Ubuntu Linux:更早的版本建议使用AUFS。
5、SUSE Linux Enterprise Server:Btrfs。
(1)存储驱动的选择是节点级别的,每个docker主机只能选择一种存储驱动,不可以为每个容器选择不同的存储驱动。
(2)在Linux系统可以通过修改/etc/docker/daemon.json文件来修改存储引擎配置,修改完之后需要重启docker才能生效。
例:将存储驱动设置为overlay2
{
“storage-driver”:"overlay2"
}
注:如果配置所在行不是文件最后一行,则请在行尾处增加逗号。
【Windows系统】上docker可选择的存储驱动:Windows Filter
【常见问题】
如果修改了正在运行docker主机的存储引擎类型,则现有的镜像和容器在重启之后都将不可使用,因为每种存储驱动在主机上存储镜像层的位置是不一样的(通常在/var/lib/docker/storage-driver/...目录下)。
如果希望切换存储引擎之后还能够继续使用之前的镜像和容器,需要将镜像保存为Docker格式,上传到某个镜像仓库,修改本地Docker存储引擎并重启,之后从镜像仓库将镜像拉取到本地,最后重启容器。
【Device Mapper配置(有风险,不是资深玩家目前不推荐使用,比较复杂,感兴趣可自行了解,比默认设置会有性能提升,且只能配置一个设备,第一次安装之后才能设置生效)】
将docker配置存储驱动为Device Mapper,并使用direct-lvm模式
1、将下面的存储驱动配置添加到/etc/docker/daemon.json中
{
“storage-driver”:"devicemapper",
"storage-opts":{
"dm.directlvm_device=/dev/xdf",
"dm.thinp_percent=95",
"dm.thinp_metapercent=1",
"dm.thinp_autoextend_threshold=80",
"dm.thinp_autoextend_percent=20",
"dm.directlvm_device_force=false"
}
}
【各配置项解释】
【dm.directlvm_device】:设置了块设备的位置。为了存储的最佳性能以及可用性,块设备应当位于高性能存储设备(如本地固态硬盘SSD)或者外部RAID存储阵列智商。
【dm.thinp_percent=95】:设置了镜像和容器允许使用的最大存储控件占比,默认是95%
【dm.thinp_metapercent】:设置了源数据存储允许使用使用的存储空间大小,默认是1%
【dm.thinp_autoextend_threshold】:设置了LVM自动扩展精简池自动扩容机制的时候,扩容的大小应当占现有控件的比例
【dm.directlvm_device_force】:允许用户决定是否将块设备格式化为新的文件系统。
2、重启docker
systemctl daemon-reload
systemctl restart docker
service docker restart
3、确认docker已成功运行,并且块设备配置已被成功加载
$ docker version
$ docker system info