【协作式原创】自己动手写docker
准备工作
- 阿里云抢占式实例:centos7.4
- 每次实例释放后都要重新安装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
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
- 产生背景
User NS
对于多个用户共享服务器的场景,每个用户购买一个tomcat实例供自己使用。
但是为了防止互相影响,需要给用户设置权限,让用户只能操作自己的tomcat。
但是呢,用户的某些操作,可能需要root权限,我们不能每个用户都赋予root权限,也不能每个用户一个物理机或虚拟机让他们做到隔离。
在这种情况下,NS就可以做到基于UID的隔离,同一个系统,却可以对不同的UID呈现不同的系统情况。
这就是User NS。PID NS