首先来说结论,Kubernetes 弃用 Docker 对程序员没有什么影响。原因很简单,程序员可以继续使用 Docker Image,因为 Docker 的容器镜像 (Image) 遵循 OCI 标准,这是 Docker 在 2015 年发起的标准。Kuberenetes 的容器镜像就是支持的 OCI 标准。
为什么 K8s 要宣布不支持 Docker?
这是因为 K8s 只需要 Docker 的容器功能,而 Docker 本身包含了下面的几大功能。
- Container Runtime
APICLINetworkVolumes
除了容器功能,其他部分 K8s 都有自己的解决方案,所以为了减少对资源的需求,也减少攻击面,去掉整体 Docker 支持是有意义的。
Minikube 会受影响吗?Dockershim 是什么?
Minikube 不会受影响,因为 minikube 还会包含支持 Docker 用的 Dockershim。Dockershim 是 K8s 支持 Docker 运行时(Runtime) 的接口,但是因为 Docker 运行时不完全支持 K8s 发起的 CRI (Container Runtime Interface) 所以 K8s 决定放弃 Dockershim,以后的运行时会使用 Containerd 或者 CRI-O,它们同样支持 OCI 容器格式标准。从这个角度看,K8s 确实是完全放弃了 Docker,因为它连 Docker 的容器运行时也不要了。
K8s 从什么版本开始不支持 Docker?
K8s 从 1.20 以后的版本会开始不支持 Docker,目前的 1.20 版本只是会给出警告,大约在 2021 年底的 1.22 版会完全弃用 Docker.
总结
K8s 已经决定弃用 Docker,但是这对于程序员来说不受影响,因为 Docker Image 遵从 OCI 格式标准,而 K8s 将来的运行时 Containerd 或者 CRI-O 都支持 OCI 格式。
参考链接
Don’t Panic: Kubernetes and Docker
Kubernetes is dropping Docker support - What does it mean for YOU?
Kubernetes 的 9 个核心组件
Kubernetes 架构简析
Kubernetes: 如何安装 kubectl
Kubernetes: 几个常用的 kubectl 命令