数据卷 Volume
分类:知识集锦 发布时间:2023/5/11 17:30:47

有时我们希望在容器的文件系统和宿主机的文件系统上搭一个桥,这时就要依靠数据卷技术。Volume技术可以让你把宿主机上的文件挂到容器里。具体地操作方法是:

docker run -v /test

docker run -v /home:/test

第一种方法是新建一个文件夹,挂载到容器test目录下。第二种方法是把home文件夹挂载到test目录下。

第一种方法新建的文件夹位置在/var/lib/docker/volumes/volumeId/_data

而这个命令背后是如何实现的呢?


实现原理

上文提到过,挂载文件系统操作先指定挂载点,后进行chroot操作。

我们只需要在 rootfs 准备好之后,在执行 chroot 之前,

Volume 指定的宿主机目录(比如 /home 目录),

挂载到指定的容器目录(比如 /test 目录)在宿主机上对应的目录(即/var/lib/docker/aufs/mnt/[可读写层 ID]/test)上,

这个Volume的挂载工作就完成了。

更重要的是,由于在挂载文件夹的时候,已经开启了Mount Namespace,所以这个挂载是宿主机不可见的。

这种机制在linux上叫做绑定挂载机制。主要是说这个挂载的文件夹会正确地被容器修改,且不会影响挂载点原有的文件夹。


这个机制背后的原理

inode代表文件,目录是目录项。这种绑定挂载其实就是改变被挂载的目录项的指向。

这样在取消挂载的时候,恢复目录项指针,一切就恢复正常了。

同时,因为改变了test的指向,所以commit不会有影响。

体验创新云技术带来核心业务效率显著提升
立即预约,加速企业数字化转型进程
Copyright ⓒ 2022 苏州博纳讯动软件有限公司 国徽 苏ICP备13004761号 法律声明及隐私政策