kubernetes学习实践(三)-容器镜像

容器内的文件系统

容器的进程理应是一份完整独立的文件系统。这样就可以在自己的文件系统下进行操作,而不会受宿主机及其他容器的影响。

Mount Namespace

我们很容易就想到了mount namespace。

int pid = clone(main_function, stack_size, CLONE_NEWNS | SIGCHLD, NULL);

创建一个新的进程,声明启动mount namespace(CLONE_NEWNS标志),但是这样的方式容器内部还是看到的是宿主机的文件系统。

问题:mount namespace修改的是容器进程对文件系统“挂载点”的认知。这意味,只有在“挂载”这个操作发生之后,进程的视图才会被改变。在此之前,容器进程会继承宿主机的各个挂载点。
这个时候,就要在创建容器进程时,除了声明启用mount namespace之外,还要告诉容器进程,有哪些目录需要重新挂载。
如:

mount("none", "/tmp", "tmpfs", 0, "")

告诉容器以temps(内存盘)格式,重新挂载/tmp目录
这样:
在容器中,就发现/tmp挂载成功,查看是个空的目录
在宿主机,因为有启动了namespace隔离,所以是不存在的。

所以mount namespace跟其他namespace的使用略有不同:它对容器进程视图的改变,一定伴随着挂载(mou

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值