Docker190814随记
实验环境
宿主机:ubuntu 61.04
Docker version: 18.09.7
image: Ubuntu 18.04.2
开始搞事情
在docker的实现技术第三方教程上面提及到 docker 的文件系统与 AuFS有关
并且是由 /var/lib/docker/aufs/diff/* 联合挂载到 /var/lib/docker/aufs/mnt/*
/var/lib/docker/aufs/diff/ 和 /var/lib/docker/aufs/mnt/ 下的目录在 image pull 回来以后就是已经有了的
只不过 /var/lib/docker/aufs/mnt/ 下面的都是空目录,/var/lib/docker/aufs/diff/ 下面的目录有内容
对于删除操作,不讨论 resolv.conf hosts 之类的特殊文件
删除文件或者文件夹以后,会在相应的 /var/lib/docker/aufs/diff/*/xxxx 下面多了个.wh.***文件【whiteout】
那么如果在宿主机在容器的可读写层手动创建.wh.xxx文件也可以做到在宿主机 模仿容器内部rm文件的操作
并且虽然说 mnt/*** 的目录是 由 diff/* 联合挂载而得,但是 .wh.xxx 这个文件只会出现在 diff 目录下那个代表可读写层的目录中,而不会出现在 mnt/*** 中
而且而且 -> 在容器里面无法创建 .wh.xxx 类似文件 , 提示 setting times of '.wh.xxxx': Operation not permitted
第三方教程解释说 -init 层存放的是 hosts resolv.conf 等信息 ,但是实际实验中发现,在容器当中更改了 hosts 文件后,更改后的内容不知道去哪了!!!
使用命令 cat aufs/diff/*/etc/hosts cat aufs/mnt/*/etc/hosts 返回信息均为空,无论是原本的文件内容还是修改后的都不见了【喵喵喵?】
AuFS挂载后对比
首先 aufs 的内部 id 【也叫 si 】是从 mount | grep 结果中得到的
然后根据 si 值去 cat /sys/fs/aufs/si_xxxxxx/br[0-9] 获得有关的 aufs 目录信息
在 aufs/diff/* 下面的文件夹通过联合挂载以后挂载到 aufs/mnt 下的一个目录,这个目录就是容器看到的文件系统,但是 aufs/mnt 目录之下同样会多了很多没有与 diff/* 下非可读写层的同名空目录,暂时不知道有啥用
挖坑待补 - 20190814,先这样