Skip to content
/ mydocker Public

参考《自己动手写 docker》从零开始实现一个简易的 docker 以及相关教程。Build a simple Docker from scratch along with related tutorials.

License

Notifications You must be signed in to change notification settings

lixd/mydocker

 
 

Repository files navigation

mydocker

《自己动手写 docker》笔记和源码

建议先了解一下 Docker 的核心原理大致分析,可以看这几篇文章:

通过上述文章,大家对 Docker 的实现原理已经有了初步的认知,接下来我们就用 Golang 手动实现一下自己的 docker(mydocker)。

微信公众号:探索云原生

鸽了很久之后,终于开通了,欢迎关注。

一个云原生打工人的探索之路,专注云原生,Go,坚持分享最佳实践、经验干货。

扫描下面的二维码关注我的微信公众帐号,一起探索云原生吧~

pivotRoot 实现 rootfs 切换

搭配 从零开始写 Docker:实现 run 命令 食用更加~。


开发环境如下:

root@mydocker:~# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.2 LTS
Release:	20.04
Codename:	focal
root@mydocker:~# uname -r
5.4.0-74-generic

测试脚本如下:

# 克隆代码
git clone -b feat-rootfs https://github.com/lixd/mydocker.git
cd mydocker
# 拉取依赖并编译
go mod tidy
go build .
# 测试 查看路径是否变化
./mydocker run -it  /bin/ls

正常结果

列出来的是 rootfs 中的文件,而不是宿主机上的

root@mydocker:~/feat-rootfs/mydocker# go build .
root@mydocker:~/feat-rootfs/mydocker# ./mydocker run -it  /bin/ls
{"level":"info","msg":"resConf:\u0026{ 0  }","time":"2024-01-12T16:19:32+08:00"}
{"level":"info","msg":"command all is /bin/ls","time":"2024-01-12T16:19:32+08:00"}
{"level":"info","msg":"init come on","time":"2024-01-12T16:19:32+08:00"}
{"level":"info","msg":"Current location is /root/busybox","time":"2024-01-12T16:19:32+08:00"}
{"level":"info","msg":"Find path /bin/ls","time":"2024-01-12T16:19:32+08:00"}
bin   dev   etc   home  proc  root  sys   tmp   usr   var

About

参考《自己动手写 docker》从零开始实现一个简易的 docker 以及相关教程。Build a simple Docker from scratch along with related tutorials.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published