美文网首页Linux
Docker原理笔记

Docker原理笔记

作者: Dakini_Wind | 来源:发表于2019-02-01 13:22 被阅读13次

[正在不断更新中...]
Docker是一个使用了Linux NamespaceCgroups的虚拟化工具
Linux Namespace是Kernel的一个功能,可以隔离一系列系统资源(PIDUIDNetwork),帮助进程隔离出自己的单独的空间。
Cgroups限制一组进程及将来子进程的资源的大小,保证不会相互争抢,这些资源包括CPU、内存、存储、网络等,并进行监控和统计信息。

Namespace

  • Namespace类型及系统调用参数:

 Namespace类型             系统调用参数
Mount Namespace         CLONE_NEWNS
 UTS Namespace          CLONE_NEWUTS
 IPC Namespace            CLONE_NEWIPC
 PID Namespace            CLONE_NEWPID
Network Namespace      CLONE_NEWNET
 User Namespace          CLONE_NEWUSER

Namespace的API主要有三个系统调用:
clone()创建新进程
unshare()将进程移除某个Namespace
setns()将进程加入到某个Namespace

  • UTS Namespace
    UTS Namespace主要来隔离nodenamedomainname两个系统标识。在UTS Namespace里面,每个Namespace有自己的hostname
    Go实现代码:
package main

import (
    "log"
    "os"
    "os/exec"
    "syscall"
)

func main(){
    cmd := exec.Command("bash")
    cmd.SysProcAttr = &syscall.SysProcAttr{
        Cloneflags:syscall.CLONE_NEWUTS,
    }
    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

    if err := cmd.Run();err!=nil{
        log.Fatal(err)
    }
}

exec.Command("bash")用来制定被fork出来的新进程内的初始命令,默认用bash来执行。

相关文章

网友评论

    本文标题:Docker原理笔记

    本文链接:https://www.haomeiwen.com/subject/fffdsqtx.html