Docker190814随记

来自三线的随记
Admin讨论 | 贡献2019年8月14日 (三) 18:09的版本

实验环境

宿主机: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,先这样