LXC文件系统隔离实现原理

LXC使用以下内核特性来来实现虚拟化:

  •  Kernel namespaces (ipc, uts, mount, pid, network and user)
  • Apparmor and SELinux profiles
  • Seccomp policies
  • Chroots (using pivot_root)
  • Kernel capabilities Control groups (cgroups)

其中mount namespace与pivot_root的结合使用,实现了文件系统的隔离。在启动容器的时候,首先clone出一个容器进程,clone指定了CLONE_NEWNS标致,这样就会为这个新启动的容器创建一个新的mount namespace,结果使这个容器有一个新的文件层次视图,在clone过程中,子进程会复制父进程的mount namespace,mount namespace的作用主要是体现在mount与umount(其实还有pivot_root)上面,由于具有不同的文件层次图,每一个mount namespace中的mount、umount与pivot_root操作对其他mount namespace中的进程是不可见的,这样在容器启动过程中执行pivot_root操作将当前容器进程的root切换为/var/lib/lxc/<container>/rootfs时((PS:不能将一个目录挂载到根目录/,所以要调用系统接口pivot_root)),对容器外其他进程而言是不可见的,容器外进程的root仍为之前的root而不是/var/lib/lxc/<container>/rootfs。比如,容器中的进程访问/var与容器外进程访问/var其实是不同的/var, 容器中进程访问的实际是/var/lib/lxc/<container>/rootfs/var。换句话说,如果clone时不指定CLONE_NEWNS,这样当容器执行pivot_root时,会影响到容器之外的所有进程,容器外的所有进程的root目录都会被改变。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值