Docker究竟是什么?为何它这么火!



若是你是数据中心或云计算IT圈子的人,这一年多来应该一直在听到普通的容器、尤为是Docker,关于它们的新闻从未间断过。Docker1.0在今年6月发布后,声势更是达到了史无前例的程度。web

 

动静之因此这么大,就是由于许多公司在以惊人的速度采用Docker。在今年7月的开源大会(OSCon)上,我遇到了早已将服务器应用程序从虚拟机(VM)转移到容器的无数企业。的确,Docker公司主管服务和支持的副总裁James Turnbull在会上告诉我,其中有三家大银行一直在使用Docker的测试版,现已在生产环境中使用Docker。对任何早期技术来讲,这无疑是极大的充满自信的举动,要知道它在安全至上的金融界几乎闻所未闻。docker

与此同时,Docker这项开源技术不只仅是红帽和Canonical等Linux巨头眼里的宠儿。微软等专有软件公司也在热烈拥抱Docker。安全

那么,为何你们都追捧容器和Docker呢?James Bottomley是Parallels公司的服务器虚拟化首席技术官,也是一位知名的Linux内核开发人员。他向我解释,Hyper-V、KVM和Xen等虚拟机管理程序都“基于虚拟化硬件仿真机制。这意味着,它们对系统要求很高。”服务器

然而,容器却使用共享的操做系统。这意味着它们在使用系统资源方面比虚拟机管理程序要高效得多。容器不是对硬件进行虚拟化处理,而是驻留在单单一个Linux实例上。这反过来意味着,你能够“丢弃没有用的99.9%的虚拟机垃圾,剩下一个小巧简洁的胶囊式容器,里面含有你的应用程序,”Bottomley如是说。网络

据Bottomley声称,所以,借助通过全面调优的容器系统,你就能够在同一硬件上拥有数量比使用Xen虚拟机或KVM虚拟机多出四到六倍的服务器应用实例。架构

是否是以为听起来很不错?毕竟,你可让服务器运行多得多的应用程序。那么,为何以前没有人作过呢?实际上,以前有人作过。容器实际上是个旧概念。分布式

容器能够追溯到至少2000年和FreeBSD Jails。甲骨文Solaris也有一个相似概念,名为Zones;Parallels、谷歌和Docker等公司一直在致力于研发诸如OpenVZ和LXC(Linux容器)之类的开源项目,旨在让容器运行起来顺畅又安全。ide

的确,不多有人知道容器,但大多数人多年来一直在使用容器。谷歌就有本身的开源容器技术lmctfy(Let Me Contain That For You,意为“让我容纳你的程序”)。只要你使用谷歌的某项功能:好比搜索、Gmail、Google Docks或不管其余什么,就分配了一个新的容器。微服务

然而,Docker创建在LXC的基础上。与任何容器技术同样,就该程序而言,它有本身的文件系统、存储系统、处理器和内存等部件。容器与虚拟机之间的区别主要在于,虚拟机管理程序对整个设备进行抽象处理,而容器只是对操做系统内核进行抽象处理。工具

这反过来意味着:虚拟机管理程序能作容器作不了的一件事就是,使用不一样的操做系统或内核。因此,举例说,你可使用微软Azure,同时运行Windows Server2012的实例和SUSE Linux企业级服务器的实例。至于Docker,全部容器都必须使用一样的操做系统和内核。

另外一方面,若是你只是想让尽量多的服务器应用实例在尽量少的硬件上运行,可能不大关心运行多个操做系统虚拟机。要是同一应用程序的多个副本正是你须要的,那么你会喜欢上容器。

改用Docker这一举措有望每一年为数据中心或云计算服务提供商节省数千万美圆的电力和硬件成本。因此难怪它们在一窝蜂地尽快采用Docker。

Docker带来了以前技术所没有的几个新特色。第一是,与以前的方法相比,Docker让容器部署和使用起来更容易、更安全。此外,因为Docker与其余容器领域的巨擘进行了合做,包括Canonical、谷歌、红帽和Parallels,共同开发其关键的开源组件libcontainer,它为容器带来了迫切须要的标准化。

与此同时,广大开发人员可使用Docker封装、交付和运行任何应用程序,应用程序成为轻型的、可移植的、自给自足的LXC容器,能够在任何地方运行。正如Bottomley告诉我,“容器让你当即享有应用程序可移植性。”

市场研究公司451 Research的资深分析师Jay Lyman补充道:“企业组织力求以一种高效、标准化、可重复的方式,让应用程序和工做负载更易于移植和分发,而有时很难作到这点。正如GitHub经过共享源代码来促进合做和创新那样,Docker Hub、Official Repos和商业支持也在帮助众多企业经过改进封装、部署和管理应用程序的方式,应对这个难题。”

最后但并不是最不重要的,Docker容器易于部署到云端。正如Ben Lloyd Pearson在opensource.com上写道:“Docker采用了一种特别的方式,以即可以整合到大多数DevOps(开发运营)应用程序当中,包括Puppet、Chef、Vagrant和Ansible,或者能够独自使用,以管理开发环境。主要卖点是,它简化了一般由另外这些应用程序执行的好多任务。具体来讲,有了Docker,人们就能够搭建与活动服务器如出一辙的本地开发环境,从同一个主机运行多个开发环境(每一个开发环境有独特的软件、操做系统和配置),在新的或不一样的服务器上测试项目,以及让任何人均可以在设置如出一辙的状况下处理同一项目,不管本地主机环境怎样。”

简而言之,Docker能为你作的事情就是:相比其余技术,它能让更多数量的应用程序在同一硬件上运行;它让开发人员易于快速构建可随时运行的容器化应用程序;它大大简化了管理和部署应用程序的任务。总而言之,我能理解做为一项企业级技术,Docker为什么一会儿蹿红。我只是但愿它不负众望,不然外头会有一些忧心忡忡的CEO和CIO。





八个Docker的真实应用场景

【编者的话】Flux 7介绍了经常使用的8个Docker的真实使用场景,分别是简化配置、代码流水线管理、提升开发效率、隔离应用、整合服务器、调试能力、多租户环境、快速部署。咱们一直在谈Docker,Docker怎么使用,在怎么样的场合下使用?也许本文能够帮到你。有须要交流的地方,能够经过评论与咱们交流。

docker-use-cases.png


几周前咱们参加了 DockerCon ,Dockercon是首个以Docker为中心的技术大会。它面向开发者以及对在Docker开放平台上构建、交付、运行分布式应用感兴趣的从业者,不论这些开放平台是运行于自用笔记本上或者是数据中心的虚拟机上。咱们参加了此次大会,Flux7是Docker基础的系统集成合做伙伴,同时也是演讲嘉宾。

咱们的CEO Aater Suleman和咱们的一位客户一同进行了演讲。虽然DockerCon大会十分有趣,但我以为大会太关注Docker的具体细节,而忽略了Docker的使用场景。因此,在这篇文章中,我想介绍并分享一些Docker的实际应用案例。

在咱们讨论Docker的使用场景以前,先来看看Docker这个工具备什么特别的地方吧。

Docker提供了轻量级的虚拟化,它几乎没有任何额外开销,这个特性很是酷。

首先你在享有Docker带来的虚拟化能力的时候无需担忧它带来的额外开销。其次,相比于虚拟机,你能够在同一台机器上建立更多数量的容器。

Docker的另一个优势是容器的启动与中止都能在几秒中内完成。Docker公司的创始人 Solomon Hykes曾经介绍过Docker在单纯的LXC之上作了哪些 事情,你能够去看看。

下面是我总结的一些Docker的使用场景,它为你展现了如何借助Docker的优点,在低开销的状况下,打造一个一致性的环境。

1. 简化配置

这是Docker公司宣传的Docker的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各类配置不同的平台(软件、系统),Docker在下降额外开销的状况下提供了一样的功能。它能让你将运行环境和配置放在代码中而后部署,同一个Docker的配置能够在不一样的环境中使用,这样就下降了硬件要求和应用环境之间耦合度。

2. 代码流水线(Code Pipeline)管理

前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,须要通过不少的中间环境。而每个中间环境都有本身微小的差异,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单很多。

3. 提升开发效率

这就带来了一些额外的好处:Docker能提高开发者的开发效率。若是你想看一个详细一点的例子,能够参考Aater在 DevOpsDays Austin 2014 大会或者是DockerCon上的演讲。

不一样的开发环境中,咱们都想把两件事作好。一是咱们想让开发环境尽可能贴近生产环境,二是咱们想快速搭建开发环境。

理想状态中,要达到第一个目标,咱们须要将每个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而,咱们却不想每次都须要网络链接,每次从新编译的时候远程链接上去特别麻烦。这就是Docker作的特别好的地方,开发环境的机器一般内存比较小,以前使用虚拟的时候,咱们常常须要为开发环境的机器加内存,而如今Docker能够轻易的让几十个服务在Docker中跑起来。

4. 隔离应用

有不少种缘由会让你选择在一个机器上运行不一样的应用,好比以前提到的提升开发效率的场景等。

咱们常常须要考虑两点,一是由于要下降成本而进行服务器整合,二是将一个总体式的应用拆分红松耦合的单个服务(译者注:微服务架构)。若是你想了解为何松耦合的应用这么重要,请参考Steve Yege的 这篇论文,文中将Google和亚马逊作了比较。

5. 整合服务器

正如经过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker能够整合多个服务器以下降成本。因为没有多个操做系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker能够比虚拟机提供更好的服务器整合解决方案。

6. 调试能力

Docker提供了不少的工具,这些工具不必定只是针对容器,可是却适用于容器。它们提供了不少的功能,包括能够为容器设置检查点、设置版本和查看两个容器之间的差异,这些特性能够帮助调试Bug。你能够在 《Docker拯救世界》的文章中找到这一点的例证。

7. 多租户环境

另一个Docker有意思的使用场景是在多租户的应用中,它能够避免关键应用的重写。咱们一个特别的关于这个场景的例子是为IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。这种多租户的基本代码很是复杂,很难处理,从新规划这样一个应用不但消耗时间,也浪费金钱。

使用Docker,能够为每个租户的应用层的多个实例建立隔离的环境,这不只简单并且成本低廉,固然这一切得益于Docker环境的启动速度和其高效的 diff命令。

你能够在 这里了解关于此场景的更多信息。

8. 快速部署

在虚拟机以前,引入新的硬件资源须要消耗几天的时间。虚拟化技术(Virtualization)将这个时间缩短到了分钟级别。而Docker经过为进程仅仅建立一个容器而无需启动一个操做系统,再次将这个过程缩短到了秒级。这正是Google和Facebook都看重的特性。 你能够在数据中心建立销毁资源而无需担忧从新启动带来的开销。一般数据中心的资源利用率只有30%,经过使用Docker并进行有效的资源分配能够提升资源的利用率。Vsa
相关文章
相关标签/搜索