引言
在学习docker过程中进一步深度学习容器隔离技术,在docker之前Linux kernel提供了自带的容器技术namespace,本文简单介绍namespace的一些原理
Linux kernel namespace
Namespace是Linux kernel提供的资源隔离方案(Linux自带的容器技术)
系统可以为进程分配不同的namespace,并保证不同的namespace资源独立分配、不同的namespace下的进程互不干扰
Linuxkernel提供了Pid,Network,Ipc,Uts,Mount,usr等资源的隔离,每个Namespace下的这些资源对于其他Namespace是不可见的。一个进程可以同时属于多个Namespace,进程、namespace、Linux kernel关系大致如下
Pid
不同用户的进程就是通过 Pid namespace 隔离开的,且不同 namespace 中可以有相同 Pid。 有了 Pid namespace, 每个 namespace 中的 Pid 能够相互隔离。
Network
网络隔离是通过 net namespace 实现的, 每个 net namespace 有独立的 network devices, IP
addresses, IP routing tables, /proc/net 目录。
比如Doc