【协作式原创】自己动手写docker

准备工作

  1. 阿里云抢占式实例:centos7.4
  2. 每次实例释放后都要重新安装go
wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xf go1.13.4.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
source ~/.bash_profile

yum -y install nano

yum install git
git clone https://github.com/yudidi/go-docker.git
git branch -all
git checkout remotes/origin/ns

centos环境安装

demo1-ns

ns源码

main.go

package main

import (
    "github.com/sirupsen/logrus"
    "github.com/urfave/cli"
    "os"
)

const usage = `go-docker`

func main() {
    app := cli.NewApp()
    app.Name = "go-docker"
    app.Usage = usage

    app.Commands = []cli.Command{
        runCommand,
        initCommand,
    }
    app.Before = func(context *cli.Context) error {
        logrus.SetFormatter(&logrus.JSONFormatter{})
        logrus.SetOutput(os.Stdout)
        return nil
    }
    if err := app.Run(os.Args); err != nil {
        logrus.Fatal(err)
    }
}

TODO 预备知识

namespace

  • 产生背景
  1. User NS
    对于多个用户共享服务器的场景,每个用户购买一个tomcat实例供自己使用。
    但是为了防止互相影响,需要给用户设置权限,让用户只能操作自己的tomcat。
    但是呢,用户的某些操作,可能需要root权限,我们不能每个用户都赋予root权限,也不能每个用户一个物理机或虚拟机让他们做到隔离。
    在这种情况下,NS就可以做到基于UID的隔离,同一个系统,却可以对不同的UID呈现不同的系统情况。
    这就是User NS。

  2. PID NS

参考

nano在CentOS上的安装和使用
如何在 CentOS 8 上安装 Go
用go写一个docker

h1

相关推荐