一个简单的、迷你的容器技术探索项目(1600+行Go代码)
参考和致谢(含视频讲解):https://github.com/HobbyBear/tinydocker
- linux namespace 命名空间
- linux union fs 联合文件系统
- linux cgroup 资源控制组
- linux 文件根目录隔离
- linux network知识,包括veth、bridge等
- go 1.21
- linux 相关系统调用
- 机器环境最好为ubuntu 22.04(开发所使用的环境)
- 宿主机需执行:
$ iptables -A FORWARD -j ACCEPT $ echo 1 > /proc/sys/net/ipv4/ip_forward
-
./mini-container run [container name] [image path] [entry point] [args...]
For example: ./mini-container run test1 / /bin/sh
-
./mini-container ls
-
./mini-container rm [container name]
-
./mini-container clear
-
./mini-container start [container name]
-
./mini-container stop [container name]
-
Q:如何使得容器支持域名解析?
A:在容器中配置
/etc/resolv.conf
文件,增加:nameserver 8.8.8.8 nameserver 8.8.4.4
- 引入cobra,增加更多可选命令(主要为增加cgroup参数,目前cgroup功能还未使用)
- 增加:宿主机端口映射功能
- 增加:用户目录挂载功能
- 增加:后台运行功能