VFS

vfs是接口的“原生”的实现,完全没有使用联合文件系统或者写时复制技术

对于vfs要创建新层,需要对上一层进行“深度复制”。与其他存储驱动程序相比,这会导致性能降低和磁盘上更多的空间使用。但是,它是健壮,稳定的,并且可以在每种环境中使用。

但并不建议在实际或者生产环境使用,但是对于需要进行简单验证的场景,或者需要测试Docker引擎的其他部件的场景,是很有价值的。对于在Docker中运行Docker的场景也很有用,要知道graphdriver嵌套起来,可能会让你丈二和尚摸不着头脑。

顺便一提:Docker引擎开发者用来构建Docker自己所使用的Dockerfile,也是采用vfs来作为里边Docker的graphdriver。

使用vfs存储驱动程序配置Docker

  1. 停止Docker

    systemctl stop docker
    
  2. 编辑/etc/docker/daemon.json。如果尚不存在,请创建它。假设文件为空,请添加以下内容。

    {
      "storage-driver": "vfs"
    }
    

    如果要设置控制VFS存储驱动程序可以使用的最大大小size,请在storage-opts密钥上设置选项。仅在Docker 17.12及更高版本中支持配额。

    {
      "storage-driver": "vfs",
      "storage-opts": ["size=256M"]
    }
    

    如果daemon.json文件包含格式错误的JSON,则Docker无法启动。

  3. 启动Docker。

    systemctl start docker
    
  4. 验证守护程序正在使用vfs存储驱动程序。使用docker info命令并查找,注意修改存储方式后,之前的image将不可用。
    在这里插入图片描述
    Docker现在正在使用vfs存储驱动程序。Docker自动创建了/var/lib/docker/vfs/目录,其中包含运行容器所使用的所有层。

vfs存储驱动程序如何工作

VFS不是一个联合文件系统。相反,每个镜像层和可写容器层在Docker主机上表示为/var/lib/docker/中的子目录。union mount提供所有层的统一视图。目录名并不直接对应于层本身的id。

VFS不支持写时复制(COW),因此每次创建新层时,它都是其父层的深层副本。这些层都位于下 /var/lib/docker/vfs/dir/。

镜像和容器在磁盘上的构造

下面是pull了一个omcat镜像
在这里插入图片描述
在这里插入图片描述
du -sh 查看占用磁盘的大小,这也是使用vfs存储驱动程序的缺点之一 。下图是overlay2存储驱动下的tomcat,对比结果可想而知
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐