k8s是不是不支持Docker了?那应该学什么呢?

如题,好像k8s不再支持docker了,那应该学哪个容器化技术呢?

阅读 2.5k
avatarAI BotBETA

k8s是不是不支持Docker了?那应该学什么呢?

回答

k8s是否不再支持Docker?

  • 不完全是。虽然Kubernetes(k8s)的官方从某个版本开始(如1.24及以后)不再直接支持Docker作为默认的容器运行时,并移除了对dockershim的维护,但Docker的容器镜像格式仍然被containerd等运行时所支持,因此你仍然可以在Kubernetes集群中使用Docker镜像。

为什么k8s不再默认支持Docker?

  • 主要原因是Docker的功能相对复杂,而Kubernetes作为一个容器编排工具,其核心是需要一个轻量、稳定且可依赖的容器运行时。Containerd作为Docker的一个组件,更加专注于容器运行时,性能更优,资源占用更少,且更为稳定。

那应该学哪个容器化技术?

  • Containerd:作为Docker的一个核心组件,Containerd被设计为一个轻量级的容器运行时,它支持Docker镜像格式,可以直接与Kubernetes集成。学习Containerd将帮助你更好地理解Kubernetes的底层工作原理,特别是在容器运行时方面。
  • Kubernetes(k8s):虽然k8s不再默认支持Docker作为容器运行时,但k8s本身的学习价值并未降低。k8s提供了强大的容器编排能力,包括服务发现、负载均衡、自动扩展、自动修复等功能,是现代云原生应用不可或缺的基础设施。
  • 其他容器技术:除了Docker和Containerd,还有其他容器技术如CRI-O(基于OCI的容器运行时)、Podman(一个无需守护进程的容器管理工具)等,这些技术也可以与Kubernetes集成,但Containerd因其与Docker的兼容性以及Kubernetes的官方推荐,通常是首选。

总结

  • Kubernetes不再默认支持Docker作为容器运行时,但Docker镜像仍然可以在Kubernetes中使用。
  • 建议学习Containerd以更好地理解Kubernetes的容器运行时机制。
  • 继续深入学习Kubernetes,掌握其强大的容器编排能力。
  • 同时,也可以关注其他与Kubernetes兼容的容器技术,以拓宽视野和选择范围。
2 个回答

首先k8s并不是不支持docker了,而且底层不再依赖于docker,而是依赖于 CRI (Container Runtime Interface)

你可以把CRI当作一个接口,而docker是其中的一个实现。这样就明确了吧?之前 k8s 底层依赖具体的实现类 Docker,现在依赖换成了 接口 CRI,而 class Docker implement CRI,现在搞明白了吗?

这样意味着 k8s 底层可以支持任何实现了 CRI 的容器技术,不但更轻量扩展也更容易,并不是docker本身过时了。

更详细的描述可以参考k8s官方blog对这个现象的描述: https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-a...

此外,由于现在的容器技术都是标准的CRI规范,所以并不影响你学了docker别的容器技术就不会用了。相反你学好了docker,其他容器技术也可以快速上手甚至由于接口的通用性你还可以平滑迁移。

比如我以前用docker,现在用podman。doocker学到的容器知识完全可以平滑迁移套用到podman上。

无非是把docker命令改为ctr命令了,没啥太大区别,可能docker特有的一些特性和命令没有了,其它镜像和容器的管理基本一样

推荐问题
宣传栏