Docker公司被收购,开源界尴尬不?

https://news.51cto.com/art/201911/606189.htm

Docker公司被谁收了?

Docker公司被谁收了?Mirantis。

Mirantis干啥的?

这个公司在国内可能知名不太高,在之前的OpenStack社区挺有名的,也是风云人物。

我们看一下迄今为止,在OpenStack基金会,各个厂商的整体正式代码提交量:

所以说,在OpenStack社区,Mirantis每次都没干的过红帽。

Kubernetes社区呢?红帽代码贡献占到16.5%,前几名没看到Docker公司和MItantis:

在Docker社区呢?红帽还是排在第三,Docker排在第二。红帽在Docker社区的排名没变,份额确实有所下降。

那么,既然很多开源的PaaS方案都是基于Docker做的,那么,Docker公司被此前做OpenStack的MItantis收购,开源社区尴尬不?

一点也不。

红帽也一点都不尴尬!

为什么呢?请看下文。

容器运行时的爱恨情仇

对着下图先说故事脉络:

  1. 业内最早的容器格运行时是LXC
  2. Docker最早让容器火起来,Docker最开始用LXC,觉得隔离性差,开发libcontainer,最终形成runC。所以说,runC是Docker的独生子。
  3. Kubernetes发布时时,发现市面上Docker挺火,因此就用Docker做容器管理工具。
  4. Docker越做越重,CoreOS做了rkt容器格式(CoreOS被红帽收购了)。rkt与Kubernetes协同工作比较好。
  5. 容器运行时格式有点多了,Linux基金会主导的开源项目说:我们要做一个container runtime标准。叫OCI。以后容器运行时要符合这个标准。Docker的独生子runC在第一时间符合了OCI标准。
  6. Kubernetes为了与容器运行时解耦(主要是Docker),提出了CRI(Container Runtime Interface)标准。它是一组与Kubernetes与container runtime进行交互的接口。所以说,CRI和OCI并不冲突:Kubernetes定义的是它调用容器运行时的标准接口,OCI定义的是容器运行时本身的标准。
  7. OCI关于容器运行时的标准提出来以后,红帽想可以专门为Kubernetes做一个轻量级的容器运行时。红帽自然会考虑到它自己全力投入的Kubernetes发布的CRI标准(Kubernetes红帽代码贡献第二),因此决定重用了runC等基本组件来启动容器, 并实现了一个最小的CRI接口。它叫CRI-O。所以说,CRI-O是CRI的一种标准实现。
  8. 当Red Hat正在开发其CRI-O,Docker也在研究CRI标准,这导致创建了另一个名为containerd的运行时(实际上是从Docker Engine剥离出来的)。所以新版本的Docker会多一层containerd。Kubernetes将containerd接入到CRI的标准中。即cri-containerd。

由于容器的和Kubernetes的发展史,最终暂时形成如下局面:

从概念上,从PaaS顶层到底层的调用关系是:

Orchestration API ->ContainerEngine API ->Kernel API

现有OpenShift3的调用架构:

  • KubernetesMaster->Kubelet->DockerEngine-> containerd -> runc -> Linux Kernel

红帽OpenShift4的调度架构:

  • KubernetesMaster->Kubelet-> CRI-O -> runc ->Linux kernel

有一些开发者想用如下的模式:

  • KubernetesMaster->Kubelet->CRI-containerd->containerd -> runc ->Linux kernel

总结

  1. LXC容器运行时基本下课了。runC容器运行时受到大佬们的青睐。
  2. Docker Engine将下课基本也是事实,这事儿谷歌和红帽联手干的。但Docker急中生智,最终containerd也被Kubernetes社区采纳了。
  3. rkt与Kubernetes协同工作不错,但与OCI的认证还没测试完。
  4. 红帽OpenShift目前在全球企业容器市场的占有率超过1/3。Containerd能否火起来,后面也得看Kubernetes社区的态度,但红帽作为企业容器的总瓢把子,肯定是不玩Containerd了。

完整故事

Docker是第一个推广容器的厂商。最初,Docker使用LXC,但其隔离层不完整,因此Docker编写了libcontainer,最终成为runC。随后,Docker成为部署容器的事实标准。在它2014年问世时,Kubernetes自然地使用了Docker,因为Docker是当时唯一可用的运行时。但Docker是一家雄心勃勃的公司,一直致力于开发新功能。例如,Docker Compose与Kubernetes同时达到1.0,两个项目之间存在一些重叠。虽然有很多方法可以使用诸如Kompose之类的工具来使两个工具互操作,但Docker通常被视为一个做太多事情的大项目。这种情况导致CoreOS以rkt的形式发布了一个更简单的独立运行时,这是通过这种方式解释的:rkt的一个创新是通过appc规范标准化镜像格式。rkt的Kubernetes兼容层(rktlet),没有通过所有Kubernetes集成测试,仍在开发中。

CRI-O

看到这些新标准,红帽认为应该创建一个更简单的运行时,只能做Kubernetes所需要的。那个“skunkworks”项目最终被称为CRI-O并实现了一个最小的CRI接口。

Red Hat负责其OpenShift平台的2016年底启动,该项目也得益于英特尔和SUSE的支持,红帽主持CRI-O开发人员Mrunal Patel主持了此次演讲。CRI-O与CRI(运行时)规范以及OCI和Docker镜像格式兼容。

CRI-O重用了runC等基本组件来启动容器,以及为skopeo项目创建的容器/图像和容器/存储等软件库,以提取容器图像和创建容器文件系统。一个名为oci-runtime-tool的独立库准备容器配置。

containerd:Docker的运行时获取API

当Red Hat正在开发其OCI的实现时,Docker也在研究该标准,这导致创建了另一个名为containerd的运行时。新守护进程是对内部Docker组件的重构,以组合OCI特定的位,如执行,存储和网络接口管理。它已经在1.12 Docker版本中有所体现。虽然我们将containerd称为“运行时”,但它并不直接实现CRI接口,该接口由另一个名为cri-containerd的守护进程覆盖。所以容器需要比Kubernetes的CRI-O更多的守护进程(5个,而CRI-O为三个)。Kubernetes将containerd接入到CRI的标准中。

与CRI-O不同,containerd通过Go API支持Kubernetes生态系统之外的工作负载。尽管containerd定义了一个明确的发布过程,用于更改API和命令行工具,但API尚未被认为是稳定的。与CRI-O一样,containerd功能完备并通过所有Kubernetes测试,但它不与systemd的cgroup互操作。

为了进一步与oci进行兼容,kubernetes还孵化了cri-o,成为了架设在cri和oci之间的一座桥梁。通过这种方式,可以方便更多符合oci标准的容器运行时,接入kubernetes进行集成使用。可以预见到,通过cri-o,kubernetes在使用的兼容性和广泛性上将会得到进一步加强。

结论

早在2年多以前,社区和红帽就已经开始讲Kubernetes与Docker解耦了。红帽在OpenShift4中果断放弃的了Docker而使用CRI-O。

所以,Docker公司被收购,开源社区和红帽都不感到尴尬!

[转帖]Docker公司被收购,开源界尴尬不?的更多相关文章

  1. 做开源界的MATLAB,PyMiner 需要更多热爱开源的你加入

    MATLAB 和 Mathematica.Maple 并称为三大数学软件.它在数学类科技应用软件中在数值计算方面首屈一指.MATLAB 可以进行矩阵运算.绘制函数和数据.实现算法.创建用户界面.连接其 ...

  2. Spring Boot 2 (六):使用 Docker 部署 Spring Boot 开源软件云收藏

    Spring Boot 2 (六):使用 Docker 部署 Spring Boot 开源软件云收藏 云收藏项目已经开源3年多了,作为当初刚开始学习 Spring Boot 的练手项目,使用了很多当时 ...

  3. [转帖]Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染

    Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染 https://www.kubernetes.org.cn/5951.html 本来想说可以用 official版本的镜像 但是一 ...

  4. 【转帖】四种BI 开源工具介绍-SpagoBI,openI,JasperSoft,Pentaho

    四种BI 开源工具介绍-SpagoBI,openI,JasperSoft,Pentaho 1 BI系统的简述 从技术角度来说 BI 包含了 ETL.DW.OLAP.DM等多环节.简单的说就是把交易系统 ...

  5. Docker管理面板Crane开源了!

    导读 数人云容器管理面板 Crane 开源啦!Crane 包含着数人云工程师对 Docker 最新技术的热爱和实践.希望借助开源社区的力量,让 Crane 完善自身,更好地成长起来,让更多的国内用户体 ...

  6. Spring Boot 2.0(六):使用 Docker 部署 Spring Boot 开源软件云收藏

    云收藏项目已经开源2年多了,作为当初刚开始学习 Spring Boot 的练手项目,使用了很多当时很新的技术,现在看来其实很多新技术是没有必要使用的,但做为学习案例来讲确实是一个绝佳的 Spring ...

  7. (转)Spring Boot 2 (六):使用 Docker 部署 Spring Boot 开源软件云收藏

    http://www.ityouknow.com/springboot/2018/04/02/docker-favorites.html 云收藏项目已经开源2年多了,作为当初刚开始学习 Spring ...

  8. [转帖]Docker的daemon.json的作用

    Docker(十六)-Docker的daemon.json的作用 https://www.cnblogs.com/zhuochong/p/10070434.html jfrog 培训的时候 说过这个地 ...

  9. [转帖]Docker五种存储驱动原理及应用场景和性能测试对比

    Docker五种存储驱动原理及应用场景和性能测试对比 来源:http://dockone.io/article/1513 作者: 陈爱珍 布道师@七牛云   Docker最开始采用AUFS作为文件系统 ...

随机推荐

  1. Boggle Game

    Description Given a board which is a 2D matrix includes a-z and dictionary dict, find the largest co ...

  2. LeetCode 1156. Swap For Longest Repeated Character Substring

    原题链接在这里:https://leetcode.com/problems/swap-for-longest-repeated-character-substring/ 题目: Given a str ...

  3. rpm命令(转)

    rpm -qa|grep mysql rpm命令是RPM软件包的管理工具.rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受 ...

  4. luogu_4317: 花神的数论题

    花神的数论题 题意描述: 设\(sum(i)\)表示\(i\)的二进制数中\(1\)的个数. 给定一个整数\(N\),求\(\prod_{i=1}^Nsum(i)\). 输入描述: 输入包含一个正整数 ...

  5. JS的ES5的扩展内容

    JS的ES5 1.严格模式: (1)什么是严格模式: 在全局或函数的第一条语句定义为:  'use strict' 如果浏览器不支持, 只解析为一条简单的语句, 没有任何副作用 (2)严格模式作用: ...

  6. 【面向对象】第三单元总结——JML

    梳理JML语言的理论基础.应用工具链情况 JML语言理论基础 JML(Java Modeling Language)是一种行为规范接口语言,通过使用不会被编译的注释形式,和固定关键字的语法,指定Jav ...

  7. 各种字符串Hash函数(转)

    /// @brief BKDR Hash Function /// @detail 本 算法由于在Brian Kernighan与Dennis Ritchie的<The C Programmin ...

  8. 微信小程序 获取地理位置信息

    app.json "permission":{ "scope.userLocation": { "desc": "你的位置信息将用 ...

  9. pandas连接多个表格concat()函数

    网易云课堂该课程链接地址 https://study.163.com/course/courseMain.htm?share=2&shareId=400000000398149&cou ...

  10. AWS研究热点:BMXNet – 基于MXNet的开源二进神经网络实现

    http://www.atyun.com/9625.html 最近提出的二进神经网络(BNN)可以通过应用逐位运算替代标准算术运算来大大减少存储器大小和存取率.通过显着提高运行时的效率并降低能耗,让最 ...