协作式原创自己动手写docker

Posted yudidi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了协作式原创自己动手写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

以上是关于协作式原创自己动手写docker的主要内容,如果未能解决你的问题,请参考以下文章

原创自己动手写工具----XSmartNote [Beta 3.0]

原创自己动手写控件----XSmartNote控件

原创自己动手写一个服务网关

原创自己动手写一个能操作redis的客户端

《自己动手写Docker》书摘之一: Linux Namespace

自己动手制作elasticsearch-head的Docker镜像