启迪云 | 王中杰
有无数的文章都在讨论和比较Docker、Kubernetes 以及Mesos。如果你是初学者,那么你可能会认为这三个开源项目正为了称霸容器界而殊死搏斗。
虽然这三种技术都使得使用容器部署、管理和伸缩应用成为可能,但实际上它们各自解决了不同的问题,并且根植于迥异的上下文环境中。事实上,这三种被广泛采用的工具链,都是有差别的。
让我们来对三个项目的原始任务、技术架构,以及它们是如何相互补充和交互的来进行对比。
Docker
Docker 公司-始于名为dotCloud 的平台即服务(PaaS)供应商。dotCloud 团队发现,在许多应用和客户之间管理依赖和二进位文件时需要付出大量的工作。因此他们将Linux 的cgroups和namespace 的一些功能合并成一个单一且易于使用的软体包,以便于应用程序可以一致地运行在任何基础设施上。这个软体包就是所谓的Docker 镜像,它提供了如下的功能:
· 将应用程序和依赖库封装在一个软体包(即Docker 镜像)中,因此应用可以被一致地部署在各个环境上;
· 提供类似Git 的语义,例如 docker push,docker commit 等命令让应用开发者可以快速接受这门新的技术,并将其融入到现有的工作流中;
· 定义Docker 镜像为不可变的层,支持不可变的基础设施。新提交的变更被分别保存为只读层,让复用镜像和追踪变更记录变得十分简单。还通过只传输更新而不是整个镜像来节省磁碟空间和网路流量;
· 通过实例化不可变的镜像和读写层来运行Docker 容器,读写层可以临时地存储运行时变更,从而轻松部署和扩展应用程序的多个实例。
Docker 变得越来越受欢迎,开发者们开始从在笔记本电脑上运行容器转而在生产环境中运行容器。跨多个机器之间协调这些容器需要额外的工具,这称之为」容器编排」。第一个支持Docker 镜像的容器编排工具是Apache Mesos 的marathon。那年,Docker 的创始人兼首席技术官Solomon Hykes 将Mesos 推荐为」生产集群的黄金标准「。不久之后,除了Mesos 的Marathon 之外,还出现了许多的容器编排技术:Nomad、Kubernets,Docker Swarm 。
随著Docker 开始商业化其开源的文件格式,该公司还开始引入工具来完善其核心的Docker 文件格式和运行时引擎,包括:
· 为公开存储Docker 镜像的而生的Docker hub;
· 存储私有镜像的Docker 仓库(Docker registry);
· Docker cloud,用于构建和运行容器的管理性服务;
· Docker数据中心作为一种商业产品体现了许多Docker 技术;