Docker基础: Linux内核命名空间之(5)pid namespace

来源:互联网 发布:网络用语qb是什么意思 编辑:程序博客网 时间:2024/05/16 04:43

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

Namespace的历史

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

Linux Namespace的6大类型

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

Ubuntu版本

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

事前确认

确认当前进程PID

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

确认当前进程的各个namespace

root@ubuntu:~# ls -l /proc/$$/nstotal 0lrwxrwxrwx 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.1 linux会在/proc下创建所对应的进程相关的信息,ns则为Namespace的信息 No.2 $$为当前进程PID,/proc/$$/ns下的Namespace的个数回随着Linux内核的高低不同显示的个数不同,因为Linux所支持的Namespace不是一次到位的 No.3 pid:[4026531836],不同的Namespace都有不同的编号,比如32968的pid的namespace的编号就是4026531836 No.4 关于Cgroup会单独在后面进行说明

事前确认

确认当前进程PID

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

使用unshare隔离pid namespace

root@ubuntu:~# echo $$32968root@ubuntu:~# unshare --fork --pid /bin/bashroot@ubuntu:~#

好像没有任何变化,其实这个已经不是刚才我们的32968进程了

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

进程号是1,难道进程号1不是init么?在起一个终端确认一下情况吧. 发现init还是好好的在用进程号1在那里存在着。

admin01@ubuntu:~$ ps -ef |grep init |grep -v greproot          1      0  0 Sep14 ?        00:00:04 /sbin/initadmin01@ubuntu:~$

再来确认一下,整体的进程关系,从这里可以清晰地看到整体从进程1到启动的这个相对进程号为1的进程其实真正的PID应该是34221
因为它是32968使用unshare所生成的子进程。

这里写图片描述

其他相关

内容 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
0 0