作为开源Container技术代表的Docker,它跟Linux内核的Namespace和Cgroup两大特性密不可分。物有本末,事有终始。知所先后,则近道矣。理解Linux的这两大特性将有助于我们更深入的理解Docker。在前面的文章中,我们曾经体验过如何使用chroot和LXC,在本文中我们将会使用unshare命令来演示Linux内核的MNT 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 -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@