关于NameSpace
Linux NameSpace主要是kernel中用于隔离系统资源的功能,而docker就是基于NameSpace去隔离系统资源达到容器化的效果
以下案例均以该代码进行举例:
package mainimport ("fmt""os""os/exec""syscall"
)func main() {cmd:=exec.Command("sh")cmd.SysProcAttr=&syscall.SysProcAttr{Cloneflags: syscall.CLONE_NEWUTS |syscall.CLONE_NEWIPC|syscall.CLONE_NEWPID|syscall.CLONE_NEWNS|syscall.CLONE_NEWUSER|syscall.CLONE_NEWNET,}cmd.Stdin=os.Stdincmd.Stdout=os.Stdoutcmd.Stderr=os.Stderrif err:=cmd.Run();err!=nil{fmt.Print(err)return}os.Exit(-1)
}
NameSpace主要包括…
UTS NameSpace:主要用于隔离nodeName、domainName。让每个NameSpace有自己的hostname
例如上面例子中cloneflage添加了newUTS,那么在运行程序中重新设置hostname在程序外并未受影响:
IPC NameSpace:用于隔离System V IPC、POSIX message queues
(都是一种用于进程间通信(IPC)的机制,常用于不同进程之间共享数据或信号量。如消息队列、信号量、共享内存),例如上面例子中cloneflage添加了NEWIPC
举一反三
PID NameSpace:隔离进程ID、(NEWPID)
Mount NameSpace:用于隔离挂载点视图,也即是说可以将目录比纳城根节点、但作用不仅限于此(NEWNS)
User NameSpace:隔离用户组ID(NEWUSER)
NetWork NameSpace:隔离网络设备、ip、port等