2019年Mirantis突然宣布收購Docker的Enterprise業務和團隊,Mirantis也是一個沒落的公司,但是他有一個名氣很大產品 OpenStack,想不明白為啥收購,可能是英雄惜英雄吧。這個昔日的獨角獸從他那個倔強的CTO和kubernetes之爭那天就注定了被收購的命運。而追溯到2016年,當時正是docker鼎盛時期,卻拒絕了微軟40億美元的邀約收購,估計現在腸子都悔青了。
今天為啥要談docker呢?因為kubernetes正式宣布從1.20開始不支持docker了,這個消息聽起來有點唬人,但對我們這些普通用戶來說影響并不大,下面我就來說說這里面的事。
Docker
很久之前為了防止docker一家獨大,docker當年的實現被拆分出了幾個標準化的模塊,標準化的目的是模塊是可被其他實現替換的,不由任何一個廠商控制
這幾個模塊分別是:
- docker-client:docker的前端,提供docker 命令,如docker run 、docker build等
- dockerd(docker daemon):docker的服務端,其實就是docker-client的后臺
- containerd:容器服務,這也是docker的核心組件,負責容器的增刪改等操作,這里containerd之所以作為一個單獨的服務,而沒有和dockerd集成到一塊,是為了讓其他的項目可以定義自己的客戶端,比如kubernetes通過CRI客戶端來訪問containerd
- containerd-shim: 是containerd的一個組件,主要是用于剝離containerd守護進程與容器進程,每啟動一個容器,就會生成一個shim進程,之所以引入shim進程是當containerd進程掛掉,shim進程還正常運行,這樣容器不會停掉。
# 發現每啟動一個容器就生成一個containerd-shim進程
# yum -y install psmisc
$ pstree
containerd─┬─14*[containerd-shim─┬─pause]
├─containerd-shim─┬─nginx───2*[nginx]
│ └─9*[{containerd-shim}]
├─containerd-shim─┬─kube-controller───5*[{kube-controller}]
│ └─9*[{containerd-shim}]
├─2*[containerd-shim─┬─coredns───9*[{coredns}]]
│ └─9*[{containerd-shim}]]
├─containerd-shim─┬─nginx───nginx
└─9*[{containerd-shim}]
- runc:是一個命令行工具端,他根據oci(開放容器組織)的標準來創建和運行容器,containerd會調用runc命令來運行鏡像。
Kubernetes
dockershim :下面就該聊聊我們的kubernetes了,kubernetes從設計之初,就通過CRI插件接口讓kubelet無需編譯就可以支持多種容器運行時,所以CRI是kubernetes的產物。而之前docker無疑是容器界的老大,所以為了集成docker,Kubelet使用了一個dockershim 的模塊,這個模塊的作用其實就充當一個網橋。
隨著技術發展和docker的沒落,dockershim是時候推出歷史舞臺了,從上圖可以發現,kubernetes其實只需要一個運行時即可,直接通過容器運行時將鏡像拉起,所以搞一個網橋只會增加中間環節,這么一說早就應該拋棄docker了。CRI:除了CRI外,還有一個CRI-O,這個東東是主要由 Red Hat 員工開發的 CRI 運行時。它的最大區別在于并不依賴于 Docker,而且目前已經在 Red Hat OpenShift 中得到使用。CRI-O 的優勢在于其采用極簡風格,或者說它的設計本身就是作為“純 CRI”運行時存在。不同于作為 Docker 組成部分的 containerd,CRI-O 在本質上屬于純 CRI 運行時、因此不包含除 CRI 之外的任何其他內容。從Docker遷移至CRI-O往往更為困難,但無論如何,CRI-O 至少可以支持 Docker 容器在 Kubernetes 上的正常運行。
OCI:對了,還有一個OCI,也是就開放容器標準,它規定了容器運行時標準(runtime spec)和容器鏡像標準(image spec),目的是定義一個業內統一的容器標準,只要按OCI規范實現,上層的 kubernetes、mesos 就都能集成這個容器了。
參考:
https://www.cnblogs.com/sparkdev/p/9129334.html
https://javazhiyin.blog.csdn.net/article/details/110789876
https://zhuanlan.zhihu.com/p/102171749