作为开源Container技术代表的Docker,它跟Linux内核的Namespace和Cgroup两大特性密不可分。物有本末,事有终始。知所先后,则近道矣。理解Linux的这两大特性将有助于我们更深入的理解Docker。
在本文中我们将会使用unshare命令来演示Linux内核的user Namespace是如何动作的。

Namespace的历史

Namespace并不是Linux才推出的东西,早在很久之前,Unix上就有类似的东西,而HPUX和Solaris商用的Conatiner更是以前就有推出。而在Linux的2.6之后的版本Namespace就逐步的被加了进来。

Linux Namespace的6大类型

项番类型功能说明
No.1MNT Namespace提供磁盘挂载点和文件系统的隔离能力
No.2IPC Namespace提供进程间通信的隔离能力
No.3Net Namespace提供网络隔离能力
No.4UTS Namespace提供主机名隔离能力
No.5PID Namespace提供进程隔离能力
No.6User Namespace提供用户隔离能力

Ubuntu版本

root@ubuntu:~# uname -a
Linux ubuntu 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
root@ubuntu:~#

事前确认

确认当前进程PID

root@ubuntu:~# echo $$
32968
root@ubuntu:~#

确认当前进程的各个namespace

root@ubuntu:~# ls -l /proc/$$/ns
total 0
lrwxrwxrwx 1 root root 0 Sep 15 10:23 cgroup -> cgroup:[4026531835]
lrwxrwxrwx 1 root root 0 Sep 15 10:23 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 Sep 15 10:23 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0 Sep 15 10:23 net -> net:[4026531957]
lrwxrwxrwx 1 root root 0 Sep 15 10:23 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 Sep 15 10:23 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Sep 15 10:23 uts -> uts:[4026531838]
root@ubuntu:~#

内容说明

项番内容说明
No.1linux会在/proc下创建所对应的进程相关的信息,ns则为Namespace的信息
No.2$$为当前进程PID,/proc/$$/ns下的Namespace的个数回随着Linux内核的高低不同显示的个数不同,因为Linux所支持的Namespace不是一次到位的
No.3user:[4026531837],不同的Namespace都有不同的编号,比如32968的user的namespace的编号就是4026531837
No.4关于Cgroup会单独在后面进行说明

事前确认

确认当前进程PID

root@ubuntu:~# echo $$
32968
root@ubuntu:~#

使用unshare隔离user namespace

root@ubuntu:~# echo $$
32968
root@ubuntu:~# unshare --user /bin/bash
nobody@ubuntu:~$

user的namespace的隔离倒是非常清晰,而且进程号也发生了变化

nobody@ubuntu:~$ echo $$
34626
nobody@ubuntu:~$

缺省的会映射到65534的用户名,可以通过做user mapping作进一步的设定,这里不再赘述。

nobody@ubuntu:~$ id
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
nobody@ubuntu:~$

新user Namespace编号

nobody@ubuntu:~ echo 34626nobody@ubuntu:  ls -l /proc/$$/ns
total 0
lrwxrwxrwx 1 nobody nogroup 0 Sep 15 16:02 cgroup -> cgroup:[4026531835]
lrwxrwxrwx 1 nobody nogroup 0 Sep 15 16:02 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 nobody nogroup 0 Sep 15 16:02 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 nobody nogroup 0 Sep 15 16:02 net -> net:[4026531957]
lrwxrwxrwx 1 nobody nogroup 0 Sep 15 16:02 pid -> pid:[4026531836]
lrwxrwxrwx 1 nobody nogroup 0 Sep 15 16:02 user -> user:[4026532506]
lrwxrwxrwx 1 nobody nogroup 0 Sep 15 16:02 uts -> uts:[4026531838]
nobody@ubuntu:~$

其他相关

内容URL
在CentOS7上使用LXC管理容器http://blog.csdn.net/liumiaocn/article/details/52348219
如何使用RHEL/CentOS 7安装创建和管理LXC (Linux Containers)http://blog.csdn.net/liumiaocn/article/details/52337479
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐