第4篇:Docker-数据卷Volume

问题:
容器角度看挂载:
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中所有的文件都是被 联合挂载的

注释:此博客为学习博客,如有侵权,请联系博主

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发已掉光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值