正如项目名称那样, 这是一个mini版的docker实现, 实现参考了mydocker:
本项目的目的是学习docker的底层原理, 而不将其作作为生产工具使用。
实现中涉及使用到的Linux技术在我的博客中发表了相关的系列文章, 希望能给大家学习这个项目带来帮助:
在编译mDocker之前, 你需要准备的环境有:
- go version >= 1.17
- ubuntu >= ubuntu 18.04, docker依赖的linux机制意味着你必须拥有一个linux环境
在项目根目录下, 执行以下命令进行编译:
go mod tidy
mkdir ./bin
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o mdocker entry.go
mdocker可以运行docker镜像, 比如我们将docker的busybox镜像导出:
docker pull busybox:latest
docker run -d busybox top
docker export -o busybox.tar [刚才启动容器id]
将busybox镜像导入mdocker:
mdocker load ./busybox.tar busybox
创建一个sh交互式容器:
mdocker run -ti -name sample busybox sh
创建一个bridge网络:
mdocker network create --driver bridge --subnet 192.168.10.0/24 mdocker0
创建容器时加入指定网络:
mdocker run -ti -name sample -net mdocker0 busybox sh