4-2 docker隔离机制-namespace
1、使用Namespaces实现了系统环境的隔离
Docker实际上是在创建容器进程时,指定了这个进程所需要启用的一组Namespace参数,这样容器就只能看到当前Namespace所限定的资源、文件、设备、状态。而对于宿主机以及其他不相干的程序,就完全看不见了
http://www.dockone.io/article/8148
常见的Namespace及其作用见下:
Mount namespaces:
内核版本:Linux 2.4.19;
被隔离的全局系统资源:文件系统挂接点
在容器语境下的隔离效果:每个容器能看到不同的文件系统层次结构
UTS namespaces:
内核版本:Linux 2.6.19;
被隔离的全局系统资源:主机名和域名(nodename和domainname);
在容器语境下的隔离效果:每个容器可以有自己的 hostname 和 domainame
IPC namespaces:
内核版本:Linux 2.6.19;
被隔离的全局系统资源:特定的进程间通信资源,包括System V IPC和POSIX message queues
在容器语境下的隔离效果:每个容器有其自己的 System V IPC和POSIX消息队列文件系统,因此,只有在同一个IPC namespace的进程之间才能互相通信
PID namespaces:
内核版本:Linux 2.6.24
被隔离的全局系统资源:进程ID数字空间(process ID number space)
在容器语境下的隔离效果:每个PID namespace中的进程可以有其独立的PID;每个容器可以有其PID为1的root进程;也使得容器可以在不同的host之间迁移,因为namespace中的进程ID和host无关了。这也使得容器中的每个进程有两个PID:容器中 PID和host上的PID。
Network namespaces:
内核版本:始于Linux 2.6.24 完成于 Linux 2.6.29
被隔离的全局系统资源:网络相关的系统资源
在容器语境下的隔离效果:在容器语境下的隔离效果:每个容器用有其独立的网络设备,IP地址,IP 路由表,/proc/net目录,端口号等等。这也使得一个host上多个容器内的同一个应用都绑定到各自容器的80端口上。
User namespaces:
内核版本:始于Linux 2.6.23 完成于 Linux 3.8)
被隔离的全局系统资源:用户和组ID空间
在容器语境下的隔离效果:在user namespace中的进程的用户和组ID可以和在host上不同;每个container可以有不同的user和group id;一个host上的非特权用户可以成为user namespace中的特权用户;
1、使用Namespaces实现了系统环境的隔离
Docker实际上是在创建容器进程时,指定了这个进程所需要启用的一组Namespace参数,这样容器就只能看到当前Namespace所限定的资源、文件、设备、状态。而对于宿主机以及其他不相干的程序,就完全看不见了
http://www.dockone.io/article/8148
常见的Namespace及其作用见下:
Mount namespaces:
内核版本:Linux 2.4.19;
被隔离的全局系统资源:文件系统挂接点
在容器语境下的隔离效果:每个容器能看到不同的文件系统层次结构
UTS namespaces:
内核版本:Linux 2.6.19;
被隔离的全局系统资源:主机名和域名(nodename和domainname);
在容器语境下的隔离效果:每个容器可以有自己的 hostname 和 domainame
IPC namespaces:
内核版本:Linux 2.6.19;
被隔离的全局系统资源:特定的进程间通信资源,包括System V IPC和POSIX message queues
在容器语境下的隔离效果:每个容器有其自己的 System V IPC和POSIX消息队列文件系统,因此,只有在同一个IPC namespace的进程之间才能互相通信
PID namespaces:
内核版本:Linux 2.6.24
被隔离的全局系统资源:进程ID数字空间(process ID number space)
在容器语境下的隔离效果:每个PID namespace中的进程可以有其独立的PID;每个容器可以有其PID为1的root进程;也使得容器可以在不同的host之间迁移,因为namespace中的进程ID和host无关了。这也使得容器中的每个进程有两个PID:容器中 PID和host上的PID。
Network namespaces:
内核版本:始于Linux 2.6.24 完成于 Linux 2.6.29
被隔离的全局系统资源:网络相关的系统资源
在容器语境下的隔离效果:在容器语境下的隔离效果:每个容器用有其独立的网络设备,IP地址,IP 路由表,/proc/net目录,端口号等等。这也使得一个host上多个容器内的同一个应用都绑定到各自容器的80端口上。
User namespaces:
内核版本:始于Linux 2.6.23 完成于 Linux 3.8)
被隔离的全局系统资源:用户和组ID空间
在容器语境下的隔离效果:在user namespace中的进程的用户和组ID可以和在host上不同;每个container可以有不同的user和group id;一个host上的非特权用户可以成为user namespace中的特权用户;