Docker190814随记:修订间差异

来自三线的随记
(创建页面,内容为“=== 实验环境 === 宿主机:ubuntu 61.04 Docker version: 18.09.7 image: Ubuntu 18.04.2 在docker的实现技术上面提及到docker的文件系统与 AuFS…”)
 
无编辑摘要
 
(未显示同一用户的4个中间版本)
第1行: 第1行:
=== 实验环境 ===
===实验环境===
宿主机:ubuntu 61.04
宿主机:ubuntu 61.04


第6行: 第6行:
image: Ubuntu 18.04.2
image: Ubuntu 18.04.2


在docker的实现技术上面提及到docker的文件系统与 AuFS有关
===开始搞事情===
在docker的实现技术第三方教程上面提及到 docker 的文件系统与 AuFS有关


并且是由/var/lib/docker/aufs/diff/* 联合挂载到 /var/lib/docker/aufs/mnt/*
并且是由 /var/lib/docker/aufs/diff/* 联合挂载到 /var/lib/docker/aufs/mnt/*  


对于删除操作,不讨论resolv.conf hosts之类的文件这种特殊情况
/var/lib/docker/aufs/diff/ 和 /var/lib/docker/aufs/mnt/ 下的目录在 image pull 回来以后就是已经有了的 


删除文件或者文件夹以后,会在相应的/var/lib/docker/aufs/diff/*/xxxx 下面多了个.wh.***文件【whiteout】
只不过 /var/lib/docker/aufs/mnt/ 下面的都是空目录,/var/lib/docker/aufs/diff/ 下面的目录有内容 
 
对于删除操作,<u>不讨论 resolv.conf hosts 之类的特殊文件</u>
 
删除文件或者文件夹以后,会在相应的 /var/lib/docker/aufs/diff/*/xxxx 下面多了个.wh.***文件【whiteout】


=== 开始搞事情 ===
那么如果在宿主机在容器的可读写层手动创建.wh.xxx文件也可以做到在宿主机 模仿容器内部rm文件的操作
那么如果在宿主机在容器的可读写层手动创建.wh.xxx文件也可以做到在宿主机 模仿容器内部rm文件的操作


但是在容器里面无法创建.wh.xxx文件,提示  <code>setting times of '.wh.xxxx': Operation not permitted</code>
并且虽然说 mnt/*** 的目录是 由 diff/*  联合挂载而得,但是 .wh.xxx 这个文件只会出现在 diff 目录下那个代表可读写层的目录中,而不会出现在 mnt/*** 中
 
而且而且 -> 在容器里面无法创建 .wh.xxx 类似文件 , 提示  <code>setting times of '.wh.xxxx': Operation not permitted</code>


'''第三方教程解释说 -init 层存放的是 hosts resolv.conf 等信息 ,但是实际实验中发现,在容器当中更改了 hosts 文件后,更改后的内容不知道去哪了!!!'''
'''第三方教程解释说 -init 层存放的是 hosts resolv.conf 等信息 ,但是实际实验中发现,在容器当中更改了 hosts 文件后,更改后的内容不知道去哪了!!!'''
第23行: 第29行:
使用命令 cat aufs/diff/*/etc/hosts  cat aufs/mnt/*/etc/hosts 返回信息均为空,无论是原本的文件内容还是修改后的都不见了【喵喵喵?】
使用命令 cat aufs/diff/*/etc/hosts  cat aufs/mnt/*/etc/hosts 返回信息均为空,无论是原本的文件内容还是修改后的都不见了【喵喵喵?】


=== AuFS挂载后对比 ===
===AuFS挂载后对比===
首先 aufs 的内部 id 【也叫 si 】是从 mount | grep 结果中得到的
首先 aufs 的内部 id 【也叫 si 】是从 mount | grep 结果中得到的


第33行: 第39行:


[[分类:Linux]]
[[分类:Linux]]
[[分类:Docker]]

2020年4月17日 (五) 20:34的最新版本

实验环境

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