Skip to content

学习《自己动手写docker》实现的docker简易版

Notifications You must be signed in to change notification settings

lin-coco/mydocker

Repository files navigation

mydocker

概述

本项目参考《自己动手写docker》这本书基于Linux系统从0实现的简易的docker

这本书侧重于实战,从实战中解释容器运行的原理,受益匪浅

  • 本书github(已给star)
  • 得到电子版推荐(我是通过得到付费买来电子版看的,微信读书上也有,比得到上贵一点。要找免费的大家应该知道去哪找,不多说。)

体验一把

拉取代码

$ git clone https://github.com/lin-coco/mydocker.git
$ cd mydocker
$ go build

创建一个可访问的nginx容器

我的环境是Linux ubuntu22.04,其他环境没测过

创建mydocker的nginx镜像

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

创建nginx容器

$ ./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 # 内网中另外一台机器访问
# 浏览器打开,如下图

image-20240315170822159

环境还原

$ ./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

创建一个flask+redis的计数器

开发笔记:创建一个flask+redis的计数器

开发笔记

开发过程中遇到的技术困难总结记录下来

开发笔记

预计多久完成?

个人2024年1月开始,结束3月。累计,1559分钟,约26小时。

得到这个平台统计的时间是没有啥参考性的,因为这是本实战类书籍,还有很多时间在编写代码调试bug,实际时长应该更多。

其实这两个月也不是都在实战这本书,所以拖到两个月时间,个人感觉自己有更多时间的话1个月以内是肯定能读完写完的。

image-20240315135859548

About

学习《自己动手写docker》实现的docker简易版

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages