Docker无疑是当下最具影响力的开源项目。为什么Docker如此成功?它是否正在取代虚拟机,这种转变发生时是否会在未来出现一个巨大的转折点?如果是这样,那会是什么时候?为了回答这些问题,让我们简单回顾一下过去的发展历程吧!这或许能让我们更好地了解现状,展望未来。在虚拟机变得司空见惯之前,系统管理员过去常常让物理服务器联机为其用户提供服务。这个过程很繁琐,不能完全自动化,可能需要数小时甚至数天。如果出现问题,他们只能去机房更换物理部件。随着虚拟机的出现,DevOps人员可以在自己所有的物理服务器上任意安装Hypervisor,然后在用户需要时直接分配新的虚拟机。卷起虚拟机不再需要数小时,而只需几分钟,而且可以自动完成。底层硬件的差异化程度越来越低,越来越接近于商品化。如果用户需要更多额外的资源,只需创建一个新的虚拟机即可。如果一台物理主机出现故障,管理员只需要将该主机承载的虚拟机迁移或恢复到另一台主机上即可。更细粒度的部署模型变得可行且易于操作。用户不再需要在同一台主机上运行所有程序,通过使用虚拟机,他们可以最大限度地发挥底层硬件的能力。人们可以在一台虚拟机上运行数据库,在另一台虚拟机上运行中间件,在第三台虚拟机上运行Web而无需担心硬件资源利用率。在同一个企业中,一组人负责服务器物理硬件的采购,另一组人负责搭建软件栈。它们的功能相对独立,互不干扰。连接两个团队的桥梁是虚拟机。解决方案架构师可以轻松且廉价地将每个应用程序部署到不同的虚拟机上,从而大大降低他们的运维成本。正因如此,软件工程师也对它爱不释手。这正是Hypervisor技术带来的最大创新。几年过去了,人们已经习惯了通过虚拟机托管他们的业务。创业公司甚至不再倾向于购买服务器硬件资源,他们只需要购买亚马逊的AWS服务。如今,每个应用程序一个虚拟机已成为部署软件堆栈的标准方式。自1990年代以来,应用程序的部署方式并没有真正改变多少。此后,如果我们需要部署一个应用程序,就需要安装一个linuxrelease版本,构建的主要意义是驱动硬件设备,然后需要安装应用程序需要的deb或rpm包,以及最后安装并配置我们实际要运行的应用程序。直到2013年,Docker提出了一种简单有效的工具来创建、分发和部署应用程序,这些应用程序以一种很酷的方式运行在一个相对独立的Linux容器中。另外,对于很多应用,它提出了一个registry的概念,有点像苹果的appstore。为了清楚起见,我将其称为“云应用程序”。部署NginxWeb服务器变得像“dockerpullnginx”一样简单。这比安装新版本的UbuntuLTS更容易、更快捷。Docker云应用程序是预先配置好的,不需要安装一些Linux发行版自带的无用包。事实上,NginxDocker云应用是由Nginx社区直接提供和分发的,而不是Canonical或RedHat。Docker最突出的创新是引入了一套包括registry在内的云应用标准规范。它没有使用虚拟机来运行云应用程序,而是使用Linux容器。容器技术其实在很多年前就已经出现,但只是在有限的圈子里流传开来,并没有被大众广泛接受。尽管它们提供了非常好的性能体验,但与虚拟机相比,它们提供的功能有限且隔离性较弱。Docker作为后起之秀,让Linux容器一下子火了起来,但Docker的成功不能完全归功于容器。这只是一个巧合。那么,容器技术本身存在哪些问题呢?首先,他们对热迁移技术的支持还很年轻,不能在非原生的工作栈上运行(例如,在Linux上运行Windows或者在Windows上运行Windows)。运行Linux)。此外,容器技术的主要挑战是安全性:与虚拟机相比,它具有更多的潜在风险。其实在容器圈,不管是Docker、CoreOS还是其他,都不推荐多租户容器部署。在虚拟机时代,你不必关心谁来使用它,或者它将如何使用。就容器技术而言,不建议在同一台主机上运行属于多个不同用户的容器。亚马逊和谷歌都提供容器托管服务,但基于隔离和安全的考虑,它们都将每个容器运行在对应的独立虚拟机上。这种方法看似效率不高,但非常简单实用。人们也逐渐开始意识到这一点(译者注:Docker与虚拟机结合的这一点)。今年年初推出的一些备受瞩目的项目,都在试图将虚拟机的一些优势融入到Docker中,其中最具代表性的就是Intel和Hyper推出的ClearLinux项目。它们都是直接使用传统的虚拟机来运行Docker云应用(没有Linux容器的参与)。我们已经完成了一些Xen测试:我们针对此类用例调整了管理程序,最终结果是启动时间与Linux容器的启动时间类似,同时保持所有其他功能。Intel在Xen上的类似努力和尝试也会在Xen开发者峰会上展示,Hyper也会展示他们的一些工作。新方向似乎为我们的用户提供了两全其美的方式:Docker的便利性和虚拟机的安全性的完美结合。在可预见的将来,Docker可能不会与虚拟机有任何竞争关系。相反,它将成为其众多托管对象之一。
