手写Docker之认识NameSpace、CGroups、Union file system

关于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

手写Docker之认识NameSpace、CGroups、Union file system_第1张图片
手写Docker之认识NameSpace、CGroups、Union file system_第2张图片
举一反三
PID NameSpace:隔离进程ID、(NEWPID)
Mount NameSpace:用于隔离挂载点视图,也即是说可以将目录比纳城根节点、但作用不仅限于此(NEWNS)
User NameSpace:隔离用户组ID(NEWUSER)

NetWork NameSpace:隔离网络设备、ip、port等

你可能感兴趣的:(手写Docker记录文章,docker,容器,运维)