docker存储引擎

docker存储引擎

目前docker的默认存储引擎为overlay2,不同的存储引擎需要相应的系统支持,如需要磁盘分区的时候传递d-type文件分层功能,即需要传递内核参数开启格式化磁盘的时候的指定功能。

docker 存储引擎是以Linux 文件系统或者 数据卷管理 为基础的。

 存储引擎弃用列表

官方文档:https://docs.docker.com/engine/deprecated/

状态 存储引擎名称 遗弃版本 移除版本
Deprecated AuFS storage driver v19.03 -
Deprecated Legacy “overlay” storage driver v18.09 -
Deprecated Device mapper storage driver v18.09 -

存储驱动类型

AUFS

AUFS(Another UnionFileSystem)是一种UnionFS。V2版本后更名为 advanced multi‐layered unification fileystem,即高级多层统一文件系统。所谓UnionFS就是把不同物理位置的目录合并mount到同一个目录中。简单来说就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统。这种系统可以一层一层的叠加修改文件。无论底下有多少层都是只读,只有最上层的文件系统是可读写。当需要修改一个文件时,AUFS创建该文件的一个副本。使用CoWCopy-on-Write将文件从只读层复制到可写层进行修改,结果也保留在可写层、在Docker中。底下的制度层就是image,可写层就是Container。

理解AUFS

centos系统开启AUFS

# cd /etc/yum.repos.d/

# wget https://yum.spaceduck.org/kernel-ml-aufs/kernel-ml-aufs.repo

# yum install kernel-ml-aufs -y

# vi /etc/default/grub
    # 将saved改为0
GRUB_DEFAULT=0


### 保存后重新生成grub
# grub2-mkconfig -o /boot/grub2/grub.cfg


### 重启
# reboot

### 验证
# grep aufs /proc/filesystems
nodev    aufs
# mkdir fruits/{apple,tomato} -p
# mkdir vegetables/{carrots,tomato} -p
# mkdir mnt
# mount -t aufs -o dirs=./fruits:./vegetables none ./mnt

Overlay

一种Union FS文件系统,Linux内核3.18后支持

Overlay2

overlay的升级版,到目前为止,所有Linux发行版推荐使用的存储类型

Devicemapper

是CentOS和RHEL的推荐存储驱动程序,但是依赖于direct-lvm,存在空间受限的问题,虽然可以通过后期配置解决;因为之前的内核版本不支持overlay2(集中在Centos/RHEL7.2之前版本);
但当前较新版本Centos和RHEL现已经支持overlay2。 device mapper存储引擎的真实案例:https:
//www.cnblogs.com/youruncloud/p/5736718.html

1、Devicemapper存储引擎的配置支持device-lvm(了解)

修改/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:设置了元数据存储(MetaData Storage)允许使用的存储空间大小。默认是 1%。
• dm.thinp_autoextend_threshold:设置了 LVM 自动扩展精简池的阈值,默认是 80%。
• dm.thinp_autoextend_percent:表示当触发精简池(thin pool)自动扩容机制的时候,扩容的大小应当占现有空间的比例。
• dm.directlvm_device_force:允许用户决定是否将块设备格式化为新的文件系统。

zfs/btrfs(Oracle-2007)

目前没有广泛应用;这些文件系统允许使用高级选项,例如创建“快照”,但需要更多的维护和设置。并且每一个都依赖于正确配置的后备文件系统。

vfs

用于测试环境,适用于无法适用Cow文件系统的情况。此存储驱动程序的性能很差,通常不建议在生产中使用。

Windows Filter

Windows操作系统的存储引擎

支持的文件系统

对于Docker,支持文件系统是所在的文件系统 /var/lib/docker/。一些存储驱动程序仅适用于特定的后备文件系统。

存储驱动支持的后备文件系统
overlay2, overlay xfs (在ftype=1的情况下), ext4
aufs xfs, ext4
devicemapper direct-lvm
btrfs btrfs
zfs zfs
vfs 任何文件系统
  • overlay2,,aufsoverlay都在文件级别而不是块级别运行。这样可以更有效地使用内存,但是在写繁重的工作负载中,容器的可写层可能会变得非常大。
  • 块级存储驱动器,例如devicemapperbtrfszfs更好地为写繁重的工作负担(虽然不如Docker volumes)执行。
  • 对于许多小型写入或具有多层或深文件系统的容器,其性能 overlay可能比更好overlay2,但会消耗更多的inode,这可能导致inode耗尽。
  • btrfszfs需要大量内存。
  • zfs 对于高密度工作负载(例如PaaS)是一个不错的选择。

 docker存储引擎存储内容

overlay存储引擎中存储了容器的文件系统,如果要获取一些信息,可以通过存储引擎目录获取

启动一个容器

[root@k8s-master1 ~]# docker run -itd --name test nginx
322eceb9a6f2608513dfd2a2495f6c6be6ae55723dbbaa3867b48eb3f0088889

通过df命令获取容器的存储目录

[root@k8s-master1 ~]# df |grep merged
overlay         38777348 2044644  36732704   6% /var/lib/docker/overlay2/df188ce318926c6e820e1403e46e4bde654cd7d3f16b0403a532f35eaad446aa/merged

[root@k8s-master1 ~]# ll /var/lib/docker/overlay2/df188ce318926c6e820e1403e46e4bde654cd7d3f16b0403a532f35eaad446aa
total 8
drwxr-xr-x 5 root root  39 Aug 11 23:29 diff
-rw-r--r-- 1 root root  26 Aug 11 23:29 link
-rw-r--r-- 1 root root 202 Aug 11 23:29 lower
drwxr-xr-x 1 root root  39 Aug 11 23:29 merged
drwx------ 3 root root  18 Aug 11 23:29 work

查看存储目录中的文件系统内容

[root@k8s-master1 ~]# ll /var/lib/docker/overlay2/df188ce318926c6e820e1403e46e4bde654cd7d3f16b0403a532f35eaad446aa/merged/
total 12
drwxr-xr-x 2 root root 4096 Jul 21 08:00 bin
drwxr-xr-x 2 root root    6 Jun 13 18:30 boot
drwxr-xr-x 1 root root   43 Aug 11 23:29 dev
drwxr-xr-x 1 root root   41 Jul 22 18:13 docker-entrypoint.d
-rwxrwxr-x 1 root root 1202 Jul 22 18:12 docker-entrypoint.sh
drwxr-xr-x 1 root root   19 Aug 11 23:29 etc
drwxr-xr-x 2 root root    6 Jun 13 18:30 home
drwxr-xr-x 1 root root   56 Jul 22 18:13 lib
drwxr-xr-x 2 root root   34 Jul 21 08:00 lib64
drwxr-xr-x 2 root root    6 Jul 21 08:00 media
drwxr-xr-x 2 root root    6 Jul 21 08:00 mnt
drwxr-xr-x 2 root root    6 Jul 21 08:00 opt
drwxr-xr-x 2 root root    6 Jun 13 18:30 proc
drwx------ 2 root root   37 Jul 21 08:00 root
drwxr-xr-x 1 root root   23 Aug 11 23:29 run
drwxr-xr-x 2 root root 4096 Jul 21 08:00 sbin
drwxr-xr-x 2 root root    6 Jul 21 08:00 srv
drwxr-xr-x 2 root root    6 Jun 13 18:30 sys
drwxrwxrwt 1 root root    6 Jul 22 18:13 tmp
drwxr-xr-x 1 root root   66 Jul 21 08:00 usr
drwxr-xr-x 1 root root   19 Jul 21 08:00 var

获取nginx进程

[root@k8s-master1 ~]# fuser /var/lib/docker/overlay2/df188ce318926c6e820e1403e46e4bde654cd7d3f16b0403a532f35eaad446aa/merged/usr/sbin/nginx
/var/lib/docker/overlay2/df188ce318926c6e820e1403e46e4bde654cd7d3f16b0403a532f35eaad446aa/merged/usr/sbin/nginx:  1586e  1638e  1639e

 修改存储引擎可以参考:https://www.cnblogs.com/zh-dream/p/14998608.html

原文地址:https://www.cnblogs.com/zh-dream/p/14870240.html