Skip to content

利用namesapce、cgroups等linux features从零实现一个容器

License

Notifications You must be signed in to change notification settings

growvv/mydocker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mydocker

使用namesapce, cgroups等linux特性对进程进行访问隔离和资源限制,创建一个自定义容器。

它是一个轻量级的Docker,仅仅使用一些Linux特性,而没有利用containersrunc

特性

  • Control Groups:对资源进行限制(CPU, Memory, Swap, Pids)
  • Namespace: 对全局系统资源进行隔离(Network, Mount, UST, PID, IPS)
  • Union File System: 将镜像层和读写层进行分层(OveralayS)

编译

  • 直接使用 go run main.go run alpine

  • 打包使用 go build -o mydocker ./mydocker

使用

使用: mydocker [command] 命令: - exec: 运行一个指令在一个已经存在的容器中 - help: 查看帮助 - images: 查看本地镜像 - ps: 查看当前容器 - run: 运行一条指令在一个新容器中

例子

  1. alpine:latest中运行/bin/sh:
mydocker run alpine /bin/sh
mydocker run alpine # 效果同上,因为默认的命令是/bin/sh

输出:

/ # 
  1. 查看当前所有容器
mydocker ps

输出:

CONTAINER ID            IMAGE                   COMMAND
42645fdba523            b747534ae29d            "/bin/sh"
5729e6b2b1a2            b747534ae29d            "/bin/sh"
  1. 查看所有本地镜像
mydocker images

输出:

REPOSITORY                      TAG             IMAGE ID
library/alpine                  latest          e7d88de73db3
library/mysql                   latest          e9c9e3680bba
library/nginx                   latest          bb129a712c24
library/python                  latest          cd150f52893e
library/redis                   latest          03f00cd78924
library/ubuntu                  latest          7c9c7fed23de

About

利用namesapce、cgroups等linux features从零实现一个容器

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages