docker namespace

目前docker完成6项隔离

namespace 系统调用参数 隔离内容
UTS CLONE_NEWUTS 主机名与域名
IPC CLONE_NEWIPC 信号量,消息队列,共享内存
PID CLONE_NEWPID 进程编号
Network CLONE_NEWNET 网络设备,网络栈,端口等
Mount CLONE_NEWNS 挂载点(文件系统)
User CLONE_NEWUSER 用户和用户组
     

Linux 内核3.8及以后的版本

namespace 的API包括

   clone()

   setns()

   unshare()

Mount namespace:
隔离文件系统挂载点,每个进程能看到的文件系统都记录在/proc/$$/mounts里,
UTS namespace:
使每个docker拥有独立的主机名和域名,在网络上可以被视为一个独立的节点,而非宿主机的一个进程
IPC namespace:
涉及到的IPC资源有包括常见的信号量,消息队列和共享内存,容器和宿主机,容器与容器之间,容器与宿主机之间隔离
PID namespace:
对进程PID重新标号,两个不同的namespace下的进程可以有相同的PID,内核中为所有的PID维护了一个树状结构,最顶层的是系统初始时建立的即root namespace,它创建的新PID namespace被称为child namespace(树的子节点),通过这种方式,不同的PID namespace会形成一个层级体系,所有的父节点可以看到子节点中的进程,并通过信号的方式对子节点中的进程产生影响,但是子节点看不到父节点PID namespace中的任何内容
Nework namespace:
对网络相关资源进行隔离,每个network namespace都有自己的网络设备,IP地址,路由表,/proc/net 目录,端口号等, 有了网络隔离,比如有两个容器的web应用都是用了80端口,因为隔离就不会冲突
User namespace:
隔离用户和组ID,也就是说一个进程在namespace里和用户和组ID可以和它在host里的ID可以不一样,
原文地址:https://www.cnblogs.com/allenhaozi/p/8283176.html