k8s弃用docker了?docker不能用了?别逗了!(代码片段)

张晋涛 张晋涛     2022-12-11     796

关键词:

Docker 大概没想到,2020 年,它在技术圈内的两次成为(舆论的)焦点,竟然都是因为信息差(说是“标题党”也不为过)。

概览

2013 年

Docker 是在 2013 年的 PyCon 上首次正式对外公布的。
它带来了一种先进的软件交付方式,即,通过容器镜像进行软件的交付。
工程师们只需要简单的 docker build 命令即可制作出自己的镜像,并通过 docker push 将其发布至 DockerHub 上。
通过简单的 docker run 命令即可快速的使用指定镜像启动自己的服务。

通过这种办法,可以有效的解决软件运行时环境差异带来的问题,达到其 Build once, Run anywhere 的目标。

从此 Docker 也基本成为了容器的代名词,并成为容器时代的引领者。

2014 年

2014 年 Google 推出 Kubernetes 用于解决大规模场景下 Docker 容器编排的问题。

这是一个逻辑选择,在当时 Docker 是最流行也是唯一的运行时。 Kubernetes 通过对 Docker 容器运行时的支持,迎来了大量的用户。

同时,Google 及 Kubernetes 社区与 Docker 也在进行着密切的合作,在其官方博客上有如下内容:

We’ll continue to build out the feature set, while collaborating with the Docker community to incorporate the best ideas from Kubernetes into Docker.

An update on container support on Google Cloud Platform

Kubernetes is an open source manager for Docker containers, based on Google’s years of experience using containers at Internet scale.
Docker is delivering the full container stack that Kubernetes schedules into, and is looking to move critical capabilities upstream and align the Kubernetes framework with Libswarm.

Welcome Microsoft, RedHat, IBM, Docker and more to the Kubernetes community

并在同一个月的 DockerCon 上发布演讲,介绍了 Kubernetes 并受到了广泛的关注。

此时 Docker Inc. 也发布了其容器编排工具, libswarm (也就是后来的 swarmkit) 。

2015 年

2015 年 OCI (Open Container Initiative)由 Docker 和其他容器行业领导者共同成立(它也是 Linux 基金会旗下项目)

OCI 主要包含两个规范:

  • 运行时规范(runtime-spec):容器运行时,如何运行指定的 文件系统上的包
  • 容器镜像规范(image-spec):如何创建一个 OCI 运行时可运行的文件系统上的包

Docker 把它自己的容器镜像格式和 runtime ( 现在的 runc ) 都捐给了 OCI 作为初始工作。

2016 年

2016 年 6 月,Docker v1.12 发布,带来了 Docker 在多主机多容器的编排解决方案,Docker Swarm 。
这里也需要注意的是,Docker v1.12 的设计原则:

  • Simple Yet Powerful (简单而强大)
  • Resilient(弹性)
  • Secure(安全)
  • Optional Features and Backward Compatibility(可选功能及向后兼容)

所以你可以通过配置自行选择是否需要使用 Docker Swarm ,而无需担心有什么副作用。

2016 年 12 月, Kubernetes 发布 CRI (Container Runtime Interface) ,这当中一部分原因是由于 Kubernetes 尝试支持另一个由 CoreOS 领导的容器运行时项目 rkt ,但是需要写很多兼容的代码之类的,为了避免后续兼容其他运行时带来的维护工作,所以发布了统一的 CRI 接口,凡是支持 CRI 的运行时,皆可直接作为 Kubernetes 的底层运行时;

当然, Kubernetes 也是在 2016 年逐步取得那场容器编排战争的胜利的。

2017 年

2017 年, Docker 将自身从 v1.11 起开始引入的容器运行时 containerd 捐给了 CNCF

2017 年,Docker 的网络组件 libnetwork 增加了 CNI 的支持;
同时通过使用 Docker 为 Docker Swarm 提供的 ipvs 相关的代码,也在 Kubernetes 中实现了基于 IPvs 的 service 负载均衡。不过在 v1.18 中开始移除了相关的依赖。

同年 11 月,Kubernetes 中新增了 containerd 的支持

2018 年

2018 年, Kubernetes 的 containerd 集成,正式 GA

之前版本的架构:

新的架构:

2019 年

2019 年,上文中提到的另一个容器运行时项目 rkt 被 CNCF 归档,终止使命了;
2019 年 Mirantis 收购 Docker 的企业服务。

2020 年

时间回到今年,Docker 主要被误会的两件事:

  • Docker Inc. 修改 DockerHub 的定价和 TOS 。国内争论较多的主要是关于合规性的问题(但是被标题党带歪了,免不了恐慌);
  • Kubernetes 宣布开始进入废弃 dockershim 支持的倒计时,被人误以为 Docker 不能再用了;

说明

关于 DockerHub 修改定价和 TOS 的事情,这里就不再多说了,毕竟 DockerHub 目前大家仍然用的很欢乐,远不像当初那些标题党宣称的那样。

重点来说一下第二件事情吧。

Kubernetes 当初选择 Docker 作为其容器运行时,本身就是因为当时它没有其他的选择,并且选择 Docker 可为它带来众多的用户。
所以,开始时,它便提供了内置的对 Docker 运行时的支持。

而 Docker 其实创建之初,并没有考虑到“编排”的这个功能,当然也没有考虑到 Kubernetes 的存在(因为当时还没有)。

dockershim 一直都是 Kubernetes 社区为了能让 Docker 成为其支持的容器运行时,所维护的一个兼容程序。 本次所谓的废弃,也仅仅是 Kubernetes 要放弃对现在 Kubernetes 代码仓库中的 dockershim 的维护支持。 以便其可以像开始时计划的那样,仅负责维护其 CRI ,任何兼容 CRI 的运行时,皆可作为 Kubernetes 的 runtime 。

在 Kubernetes 提出 CRI 时,有人建议在 Docker 中实现它。但是这种方式也会带来一个问题,即使 Docker 实现了 CRI,但它仍然不是一个单纯的容器运行时,它本身包含了大量的非 “纯底层容器运行时” 所具备的功能。

所以后来 自 Docker 中分离出来的 containerd 项目,作为一个底层容器运行时出现了,它是 Kubernetes 容器运行时更好的选择。

Docker 使用 containerd 作为其底层容器运行时以及众多的云厂商及公司在生产环境中使用 containerd 作为其 Kubernetes 的运行时,这也从侧面验证了 containerd 的稳定性。

现在 Kubernetes 和 Docker 社区都相信 containerd 已经足够成熟可直接作为 Kubernetes 的运行时了,而无需再通过 dockershim 使用 Docker 作为 Kubernetes 的运行时了。这也标志着 Docker 为 Kubernetes 提供一个现代化的容器运行时的承诺最终兑现了。

而本次事件中,重点的 dockershim 之后的方向如何呢?Kubernetes 代码仓库中的 dockershim 将会在未来版本中移除,但是 Mirantis 公司已经和 Docker 达成合作,在未来会共同维护一份 dockershim 组件,以便支持 Docker 作为 Kubernetes 的容器运行时。

Otherwise, if you’re using the open source Docker Engine, the dockershim project will be available as an open source component, and you will be able to continue to use it with Kubernetes; it will just require a small configuration change, which we will document.

Mirantis 公司宣布将维护 dockershim

Q&A

Q:本次 Kubernetes 放弃对 dockershim 的维护,到底有什么影响?
A:对于普通用户而言,没有任何影响;对于在 Kubernetes 之上进行开发的工程师,没什么太大影响;对于集群管理员,需要考虑是否要在未来版本中,将容器运行时,升级为支持 CRI 的运行时,比如 containerd 。
当然,如果你并不想切换容器运行时,那也没关系,Mirantis 公司未来会和 Docker 共同维护 dockershim , 并作为一个开源组件提供。

Q: Docker 不能用了吗?
A:Docker 仍然是本地开发,或者单机部署最佳的容器工具,它提供了更为人性化的用户体验,并且也有丰富的特性。目前 Docker 已经和 AWS 达成合作,可直接通过 Docker CLI 与 AWS 集成。另外,Docker 也仍然可以作为 Kubernetes 的容器运行时,并没有立即中止对其支持。

Q:听说 Podman 可以借机上位了?
A:想太多。Podman 也并不兼容 CRI ,并且它也不具备作为 Kubernetes 容器运行时的条件。我个人也偶尔有在用 Podman, 并且我们在 KIND 项目中也提供了对 Podman 的支持, 但实话讲,它也就是只是一个 CLI 工具,某些情况下会有些作用,比如如果你的 Kubernetes 容器运行时使用 cri-o 的情况下,可以用来本地做下调试。

总结

本文主要介绍了 Docker 和 Kubernetes 的发展历程,也解释了本次 Kubernetes 仅仅是放弃其对 dockershim 组件的支持。未来更推荐的 Kubernetes 运行时是 兼容 CRI 的 containerd 之类的底层运行时。

Mirantis 公司将会和 Docker 共同维护 dockershim 并作为开源组件提供。

Docker 仍然是一款最佳的本地开发测试和部署的工具。


欢迎订阅我的文章公众号【MoeLove】

k8s1.20弃用docker评估之docker和oci镜像格式的差别(代码片段)

...,Kubernetes在其最新的Changelog中宣布,自Kubernetes1.20之后将弃用Docker作为容器运行时。弃用Docker带来的,可能是一系列的改变,包括不限于:容器镜像构建工具容器CLI容器镜像仓库容器运行时专题文章《K8S1.20弃用Docker评估》会从... 查看详情

dockerdesktop向大公司宣告收费,网友大呼:是时候弃用了!

作者|苏宓出品|CSDN(ID:CSDNnews)在容器引擎Docker诞生的8年间,其与开源的容器编排Kubernetes共同推动容器技术在云计算领域的应用,也让自身在全球范围内受到了广泛的关注。可以说,做过云计算开发的程... 查看详情

dockerdesktop向大公司宣告收费,网友大呼:是时候弃用了!

在容器引擎Docker诞生的8年间,其与开源的容器编排Kubernetes共同推动容器技术在云计算领域的应用,也让自身在全球范围内受到了广泛的关注。可以说,做过云计算开发的程序员,十有八有学过Docker技术。不过ÿ... 查看详情

用了一个月的docker,我真的是爱了(代码片段)

用了一个月的Docker,我真的是爱了文章目录用了一个月的Docker,我真的是爱了前言Docker的概念安装DockerDocker的架构配置镜像加速器Docker基础命令Docker镜像命令的使用列出镜像列表获取一个新的镜像查找镜像删除镜像Docker... 查看详情

k8s+docker(学习.....)

docker安装(基于linux)一、docker的官方安装文档:https://docs.docker.com/engine/installation/linux/centos/由docker给的文档可以看出它也只是去配置了一个docker的yum源、然后就通过这个源来安装docker了;在这个文档下我们采用手工配置的方式... 查看详情

docker学习docker系列结束-新的开始k8s(代码片段)

Docker学习(十一)Docker系列结束-新的开始K8S标签(空格分隔):dockek8sDocker系列结束上一篇讲到使用docker官方提供的容器编排工具docker-compose,但是docker-compose强调的是单机机进行容器编排,使用起来比较受限,对于一些大公司... 查看详情

docker和k8s面试总结

参考技术A花了大半个月对k8s&docker进行了梳理,包括之前读过的书,官方文档以及k&d在公司项目的实践等。以下是个人对docker&k8s面试知识点的总结:1docker常见面试题如下每一点可根据回答进行适当深入1.1什么是dockerdocker和传统li... 查看详情

docker和k8s

...司将自己的容器技术进行了简化和标准化,并命名为——Docker。Docker技术诞生之后,并没有引起行业的关注。而dotCl 查看详情

[转]用了docker是否还有必要使用openstack?

从一项颠覆性的技术成果转化并衍生出一整套社区体系,Docker在发展速度上打破了一个又一个历史纪录。然而,Docker项目在采纳与普及方面表现出惊人态势的同时,也给我们带来了一系列疑问与困惑。在今天的文章中,我希望将... 查看详情

docker无法启动

...术A使用了网上的各种方法就是不能启动。。。。。找到docker的github的issues从上往下一个试试,最后终于能用了残忍:地址docker/for-linux/issues解决方法:输入:接着操作:正常了。。。。。安装nvidia-dockersudomkdir-p/etc/dockersudotee/etc/d... 查看详情

K8s 编译的 docker 镜像的问题

】K8s编译的docker镜像的问题【英文标题】:issueswithK8scompileddockerimages【发布时间】:2019-08-2109:05:48【问题描述】:将repo(tagv1.14.0)克隆到本地机器后;我修改了cmd/kube-apiserver/app/server.go文件;我添加了一行新代码,即客户日志条目... 查看详情

k8s和docker区别

k8s和docker区别:1、技术原理不同Dockers是容器化技术,K8S是一套自动化部署工具,可全生命周期管理Dockers容器。K8S是谷歌开发的容器集群管理系统。在Dockers技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动... 查看详情

k8s与docker有啥关系

简要介绍:  官方定义1:Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。  官方定义2:k8s是一个开源的容器集群管理系统... 查看详情

pycharm+docker+gpu环境配置

...caffe就不能用了呢(手动狗头),那为了免受其苦就用了docker配置环境  我这里ubuntu:14.041.首先安装docker,根据docker官网,先在左边根据需要选择docker版本,推荐docker-ce(因为我只用过ce,蛤蛤蛤),再选择系统,然后... 查看详情

docker容器和k8s添加healthcheck(代码片段)

docker容器启动后,怎么确认容器运行正常,怎么确认可以对外提供服务了,这就需要healthcheck功能了。之前对healthcheck的功能不在意,因为只要镜像跑起来了就是健康的,如果有问题就会运行失败。在连续两次收到两个启动失败... 查看详情

docker不香吗?为什么还要用k8s

...止转载!目录容器化时代来了容器化技术的尖刀武器Docker横空出世Docker怎么用?编排系统的需求催生k8sk8s与DockerSwarm江湖恩怨k8s是做什么用的?K8s架构和组件Docker与k8s难舍难分开发实践,灵魂追问最后一个问题随... 查看详情

docker不香吗?为什么还要用k8s

...止转载!目录容器化时代来了容器化技术的尖刀武器Docker横空出世Docker怎么用?编排系统的需求催生k8sk8s与DockerSwarm江湖恩怨k8s是做什么用的?K8s架构和组件Docker与k8s难舍难分开发实践,灵魂追问最后一个问题随... 查看详情

高级篇-docker之微服务服务docker化k8s

...结束,现在开始我们的高潮部分,如果吧我们的服务使用docker,使用服务编排工具,把项目给部署运行起来。源码:https://github.com/limingios/msA-docker注意因docker话都是在linux环境,为了方便编写dockerfile文件,我切换到mac本上进行演... 查看详情