Docker 17
引擎 | Engine

使用VFS存储驱动程序(引擎) | Use the VFS storage driver (Engine)

使用VFS存储驱动程序

VFS存储驱动程序不是联合文件系统;相反,每个图层都是磁盘上的目录,并且没有写时复制支持。要创建一个新图层,先前的图层会进行“深层复制”。与其他存储驱动程序相比,这会导致磁盘性能下降和磁盘使用空间更多。但是,它强大,稳定,适用于各种环境。它也可以用作在测试环境中验证其他存储后端的机制。

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

  • 停止Docker。$ sudo systemctl stop docker

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

{ "storage-driver": "vfs" }

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

3. 启动Docker。$ sudo systemctl start docker

4. 验证守护进程正在使用vfs存储驱动程序。使用该docker info命令并查找Storage DriverBacking filesystem

$ docker info存储驱动程序:vfs <output truncated>

Docker现在使用vfs存储驱动程序。Docker自动创建了/var/lib/docker/vfs/目录,其中包含运行容器使用的所有图层。

如何vfs存储驱动程序作品

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

VFS不支持写入时拷贝(COW),因此每次创建一个新图层时,它都是其父图层的深层副本。这些图层都位于下方/var/lib/docker/dir/

示例:映像和容器在磁盘上的结构

以下docker pull命令显示了一个Docker主机下载一个包含五层的Docker镜像。

$ docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu e0a742c2abfd: Pull complete 486cb8339a27: Pull complete dc6f0d824617: Pull complete 4f7a5649a30e: Pull complete 672363445ad2: Pull complete Digest: sha256:84c334414e2bfdcae99509a6add166bbb4fa4041dc3fa6af08046a66fed3005f Status: Downloaded newer image for ubuntu:latest

pull之后,这些层中的每一层都被表示为一个子目录/var/lib/docker/vfs/dir/。目录名称与docker pull命令中显示的图像层ID不相关。要查看每个图层在磁盘上占用的大小,可以使用du -sh命令,该命令将大小视为可读的值。

$ ls -l /var/lib/docker/vfs/dir/ total 0 drwxr-xr-x. 2 root root 19 Aug 2 18:19 3262dfbe53dac3e1ab7dcc8ad5d8c4d586a11d2ac3c4234892e34bff7f6b821e drwxr-xr-x. 21 root root 224 Aug 2 18:23 6af21814449345f55d88c403e66564faad965d6afa84b294ae6e740c9ded2561 drwxr-xr-x. 21 root root 224 Aug 2 18:23 6d3be4585ba32f9f5cbff0110e8d07aea5f5b9fbb1439677c27e7dfee263171c drwxr-xr-x. 21 root root 224 Aug 2 18:23 9ecd2d88ca177413ab89f987e1507325285a7418fc76d0dcb4bc021447ba2bab drwxr-xr-x. 21 root root 224 Aug 2 18:23 a292ac6341a65bf3a5da7b7c251e19de1294bd2ec32828de621d41c7ad31f895 drwxr-xr-x. 21 root root 224 Aug 2 18:23 e92be7a4a4e3ccbb7dd87695bca1a0ea373d4f673f455491b1342b33ed91446b

$ du -sh /var/lib/docker/vfs/dir/* 4.0K /var/lib/docker/vfs/dir/3262dfbe53dac3e1ab7dcc8ad5d8c4d586a11d2ac3c4234892e34bff7f6b821e 125M /var/lib/docker/vfs/dir/6af21814449345f55d88c403e66564faad965d6afa84b294ae6e740c9ded2561 104M /var/lib/docker/vfs/dir/6d3be4585ba32f9f5cbff0110e8d07aea5f5b9fbb1439677c27e7dfee263171c 125M /var/lib/docker/vfs/dir/9ecd2d88ca177413ab89f987e1507325285a7418fc76d0dcb4bc021447ba2bab 104M /var/lib/docker/vfs/dir/a292ac6341a65bf3a5da7b7c251e19de1294bd2ec32828de621d41c7ad31f895 104M /var/lib/docker/vfs/dir/e92be7a4a4e3ccbb7dd87695bca1a0ea373d4f673f455491b1342b33ed91446b

以上输出结果显示三层各取104M,两层取125M。这些目录彼此之间只有很小的差异,但在磁盘上占用的空间几乎相同。这是使用vfs存储驱动程序的一个缺点。

相关信息

  • 了解图像,容器和存储驱动程序

  • 选择存储驱动程序

  • AUFS存储驱动程序在实践中

  • OverlayFS存储驱动程序在实践中的应用

  • Btrfs存储驱动程序在实践中的应用

  • 设备Mapper存储驱动程序在实践中的应用

容器存储驱动程序vfs