问题:
 容器角度看挂载:
 1、容器里进程 touch new.txt ,宿主机怎样才能获取到new.txt? 本博客已解决
 2、宿主机上的 目录&&文件,容器里面的进程 怎样能访问到? 本博客已解决
 3、宿主机上的 目录&&文件,挂载到容器里的目录,原理是什么?本博客已解决
 4、宿主机的home目录挂载到 容器的test目录,test目录里的内容,docker commit的时候会不会提交上去? 本博客已解决
 解答:其实是不会的
   容器的镜像操作,都是发生在宿主机空间的
   由于Mount NameSpace的隔离,宿主机不能看到绑定挂载的存在,在宿主机角度来看,rootfs关于容器test目录的层文件(/var/lib/docker/aufs/mnt/[可读写层 ID]/test),始终是空的 
 5、执行docker run -v /home:/test 的时候,容器镜像里面的/test目录下本来就有内容,会发现一个问题,在宿主机的/home目录下面,也会出现test目录下的内容,这是为什莫?为什么这些文件没有被绑定挂载隐藏起来?
6、给容器中的python应用加上cpu和memory的限制,然后启动应用。查看下Cgroups文件系统的设置
7、在容器的内部想看到 宿主机的IP地址怎样能做到?
 答案:由于namespace隔离的存在,是拿不到宿主机的IP的
   从K8S的环境变量里面能够得到 
linux角度看挂载:
 8、linux的绑定挂载机制和 Volume机制有什么关系?
| ### 知识点1:Volume机制: | 
允许将宿主机的指定的目录 / 文件 ,挂载到容器里面 ,进行读取和修改的操作
| ###知识点2: 运行方式:把一个宿主机的目录 挂载到容器的/test目录 | 
(第一种)docker run -v /test …
 (第二种)docker run -v /home:/test …
 区别:
 第一种:没有声明 宿主机的目录
 Docker 就会默认的在宿主机上创建一个临时的目录 /var/lib/docker/volumes/[VOLUME_ID]/_data
 然后把临时的这个目录 挂载在/test上面
 第二种:Docker直接把宿主机的/home目录挂载到容器的/test目录上面
| ### 知识点3:Volume机制的原理: | 
  容器进程被创建以后,尽管已经开启了 Mount NameSpace
   但是在执行chroot / pivot_root 监狱之前,容器进程一直是可以看到宿主机上面的文件系统的
   宿主机上面的文件系统中,也包括了容器的镜像
   容器镜像的层都在宿主机的/var/lib/docker/aufs/diff目录下面
   容器启动之后,这写文件都会被联合挂载到 /var/lib/docker/aufs/mnt中
   这样容器的rootfs建立好了
  Volume机制是在执行chroot之前,把Volume指定的 “宿主机目录home” 挂载到 “指定的容器目录test”,Volume的挂载就完成了
   同理大家可以看到,volume是在docker run的时候进行的
Note:
   执行Volume挂载操作的时候,“容器进程” 其实已经建立好了 ,这个时候 mount namespace已经开启了 ,这个挂载操作只能在容器内部看到,在宿主机上是看不到内部的挂载点的
   保证了容器的隔离性不会被Volume打破
总结:类比下面的 linux绑定挂载机制
   宿主机通过Volume机制 绑定目录 到容器特定目录test,
   容器中的进程 对test目录进行的所有的操作,实际都是在操作宿主机的对应目录而不会影响到容器的test目录
绑定挂载:是inode替换的过程
   inode:存放文件内容的
   dentry:目录项 ,访问inode的指针
   mount --bind /home /test
   将 /home目录挂载到test目录上面 :将/test目录的dentry重定向到了/home的inode上面
   当修改/test目录的时候,实际是修改的/home的inode
   一旦执行了umount
   test原来目录中的内容会恢复
   修改真正发生的其实是在home里面
全角度看docker镜像:
 
 (1)容器进程 python app.py 运行在 隔离环境(namespace +Cgroups)里面
 (2)容器进程需要的各种文件 python app.py os文件存在于rootfs的只读层
 (3)rootfs中所有的文件都是被 联合挂载的
注释:此博客为学习博客,如有侵权,请联系博主










