docker系列—聊一聊存储驱动VFS
文章目录VFS使用vfs存储驱动程序配置Dockervfs存储驱动程序如何工作镜像和容器在磁盘上的构造VFSvfs是接口的“原生”的实现,完全没有使用联合文件系统或者写时复制技术。对于vfs要创建新层,需要对上一层进行“深度复制”。与其他存储驱动程序相比,这会导致性能降低和磁盘上更多的空间使用。但是,它是健壮,稳定的,并且可以在每种环境中使用。但并不建议在实际或者生产环境使用,但是对于需要...
VFS
vfs是接口的“原生”的实现,完全没有使用联合文件系统或者写时复制技术
。
对于vfs要创建新层,需要对上一层进行“深度复制”。与其他存储驱动程序相比,这会导致性能降低和磁盘上更多的空间使用。但是,它是健壮,稳定的,并且可以在每种环境中使用。
但并不建议在实际或者生产环境使用,但是对于需要进行简单验证的场景,或者需要测试Docker引擎的其他部件的场景,是很有价值的。对于在Docker中运行Docker的场景也很有用,要知道graphdriver嵌套起来,可能会让你丈二和尚摸不着头脑。
顺便一提:Docker引擎开发者用来构建Docker自己所使用的Dockerfile,也是采用vfs来作为里边Docker的graphdriver。
使用vfs存储驱动程序配置Docker
-
停止Docker
systemctl stop docker
-
编辑/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无法启动。
-
启动Docker。
systemctl start docker
-
验证守护程序正在使用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,对比结果可想而知
更多推荐
所有评论(0)