【云原生 二】 Docker架构演进过程

从1.4版本开始接触docker,到现在的20.10.*版本,可以说docker已经女大十八变。很早就想总结一下docker架构的几次大的变化,虽然留意并感觉到了docker架构的变化,苦于“难见以前的她”,以及具体在哪个版本开始变化的,所以一直没有搞。总有些志同道合的人已经做了这件事,翻看了一下他们的总结+实际实验,所以我也来说道说道。

这里我划分了四个时期:docker早期架构、docker中期架构、docker晚期架构、docker现有架构。

docker早期架构

早期docker(docker1.6.2)只有一个叫docker的二进制可执行程序,客户端、服务端一肩挑,通过docker加载Image创建container,并执行容器中的CMD以启用容器。此时容器中看到的1号进程就是外面的docker。

调用链:docker -> container's CMD
与容器进程关系:
systemd
   |_ _ docker
       |_ _ container1 processor
       |_ _ container2 processor

docker中期架构

到了中期(docker17.*)docker前后端拆分,客户端docker被拆了出来,同时server端也进行了拆解(详见下面的调用链)。此时容器中看到的1号进程就是外面的docker-containerd-shim。

调用链:dockerd -> docker-containerd -> docker-containerd-shim -> docker-runc(执行完就退出) -> container's CMD
与容器进程关系:
systemd
   |_ _ dockerd
       |_ _ docker-containerd
           |_ _ docker-containerd-shim
           |   |_ _container1 processor
           |_ _ docker-containerd-shim
               |_ _container2 processor

举例:
4459     1  4 Jul05 ?        23:54:49 /usr/bin/dockerd --bip=197.166.100.1/24 --ip-masq=false --mtu=1450 --insecure-registry 192.168.14.251:5000
5369  4459  0 Jul05 ?        01:07:38 docker-containerd --config /var/run/docker/containerd/containerd.toml
7779  5369  0 08:19 ?        00:00:01 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/d744886fd646f1bd918aa83a44b166f32a09ab49c4b1065d7f6c34b07c71448f -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc
7800  7779  1 08:19 ?        00:08:25 java -Xmx1g -jar -Dlog4j2.formatMsgNoLookups=true /opt/smc-server-3.0.jar

docker后期架构

docker后期(docker19.*+),docker为了推出容器标准,将容器相关的功能拆到了containerd中,并将其捐献给了云原生计算基金会。至此,你可以跳过docker,直接使用containerd进行容器管理(镜像、容器相关的所有操作都OK)。此时容器中看到的1号进程就是外面的containerd-shim。

此后,docker架构的所有变化都是围绕containerd来的,docker本身已经没有架构上的变化。也就是说现在的架构和后期架构比,只有containerd的架构变动。

调用链:dockerd -> containerd -> containerd-shim -> runc(执行完就退出) -> container's CMD
与容器进程关系:
systemd
   |_ _ dockerd
   |_ _ containerd
       |_ _ containerd-shim
       |   |_ _ container1 processor
       |_ _ containerd-shim
           |_ _ container2 processor
# containerd.io包内容:
rpm -ql containerd.io
/etc/containerd
/etc/containerd/config.toml
/usr/bin/containerd
/usr/bin/containerd-shim
/usr/bin/ctr
/usr/lib/systemd/system/containerd.service
/usr/sbin/runc

docker现在架构

docker现在(docker20.10.*)的架构跟上面没有区别了,区别在于containerd的变化。containerd-shim换成了containerd-shim-runc-v2,调用逻辑也有所不同,containerd同dockerd一样彻底独立出来了,其下不再有子进程。此时容器中看到的1号进程就是外面的containerd-shim-runc-v2。

调用链:dockerd -> containerd -> containerd-shim(执行完就退出) -> containerd-shim-runc-v2 -> runc(执行完就退出) -> container's CMD
与容器进程关系:
systemd
   |_ _ dockerd
   |
   |_ _ containerd
   |
   |_ _ containerd-shim-runc-v2
   |   |_ _ container1 processor
   |
   |_ _ containerd-shim-runc-v2
       |_ _container2 processor
# containerd.io包内容:
rpm -ql containerd.io
/etc/containerd
/etc/containerd/config.toml
/usr/bin/containerd
/usr/bin/containerd-shim
/usr/bin/containerd-shim-runc-v1
/usr/bin/containerd-shim-runc-v2
/usr/bin/ctr
/usr/bin/runc
/usr/lib/systemd/system/containerd.service

举例:

ps -ef |grep container
3933     1  0 Jul25 ?        00:32:28 /usr/bin/containerd
3948     1  0 Jul25 ?        00:00:46 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
4092     1  0 Jul25 ?        00:02:39 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 79e0c69bb231f9d42d198ee4afbc9bb9c98be0156e04db1f20dcefb87614f7c6 -address /run/containerd/containerd.sock
15294  4092  0 Jul25 ?        00:16:23 kube-scheduler --authentication-kubeconfig=/etc/kubernetes/scheduler.conf --authorization-kubeconfig=/etc/kubernetes/scheduler.conf --bind-address=127.0.0.1 --kubeconfig=/etc/kubernetes/scheduler.conf --leader-elect=true

前面我们了解了一下“CRI、OCI、containerd和CRI-O、runc”等概念,今次又说道了一下“Docker架构演进过程”,下次我们讲点啥好呢?“kubelet调用CRI的演进过程”怎么样?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值