关于NameSpace
Linux NameSpace主要是kernel中用于隔离系统资源的功能,而docker就是基于NameSpace去隔离系统资源达到容器化的效果
以下案例均以该代码进行举例:
package main
import (
"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.Stdin
cmd.Stdout=os.Stdout
cmd.Stderr=os.Stderr
if 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等