本项目参考《自己动手写docker》这本书基于Linux系统从0实现的简易的docker
这本书侧重于实战,从实战中解释容器运行的原理,受益匪浅
$ git clone https://github.com/lin-coco/mydocker.git
$ cd mydocker
$ go build
我的环境是Linux ubuntu22.04,其他环境没测过
nginx镜像创建最快的方式是docker export官方nginx的镜像
$ docker run -d nginx
$ docker ps
$ docker exec -it 84e655ef17e0 /bin/bash
$ echo "daemon off;" >> /etc/nginx/nginx.conf # 让nginx在容器中前台启动
$ cat /etc/nginx/nginx.conf
$ exit
$ docker export [容器id] -o mynginx.tar
$ mkdir -p /var/lib/mydocker/overlay/image/
$ mv mynginx.tar /var/lib/mydocker/overlay/image/ # 移动到mydocker存储镜像文件的地方
$ ls /var/lib/mydocker/overlay/image/
mynginx.tar
$ ./mydocker images
$ sysctl -w net.ipv4.ip_forward=1 # 全局允许forwark转发
$ ./mydocker network create --driver bridge --subnet 192.168.99.0/24 --gateway 192.168.99.1 mynginxbridge # 创建mydocker桥接网络
$ ./mydocker network list
$ ./mydocker run -d --name bird -net mynginxbridge -p 8888:80 mynginx nginx # 启动nginx镜像
$ ./mydocker ps
$ ps -ef | grep [容器在主机上的pid]
$ ping 192.168.99.2 # 容器ip
$ curl 192.168.99.2:80 # 主机访问容器ip:port
$ curl 10.211.55.9:8888 # 主机ip访问
$ curl 10.211.55.2:8888 # 内网中另外一台机器访问
# 浏览器打开,如下图
$ ./mydocker stop bird
$ ./mydocker rm bird
$ ./mydocker network remove mynginxbridge
$ sysctl -w "net.ipv4.ip_forward=0"
$ rm -rf /var/lib/mydocker
$ rm -rf /var/run/mydocker
开发过程中遇到的技术困难总结记录下来
个人2024年1月开始,结束3月。累计,1559分钟,约26小时。
得到这个平台统计的时间是没有啥参考性的,因为这是本实战类书籍,还有很多时间在编写代码调试bug,实际时长应该更多。
其实这两个月也不是都在实战这本书,所以拖到两个月时间,个人感觉自己有更多时间的话1个月以内是肯定能读完写完的。