容器并不是什么新鲜事物,但是实现它们总是比需要的要复杂一些。 Docker在简化容器方面取得了长足的进步,并从此引爆了整个世界。 让我们看看为什么。
为什么Docker成为家喻户晓的名字
Docker不是很老。 2014年5月,当我写了一篇煽动性的博客文章Docker是Heroku Killer时 ,它即将达到1.0版本。几周后的后续行动叫做Tempering My Docker Enthusiasm 。 旁注, Heroku仍然很棒,我对Docker的热情很强。 Heroku现在也支持Docker 。
自2014年6月发行1.0版以来,Docker甚至在谷歌,微软,亚马逊,思科,惠普,IBM,RedHat,VMWare等公司的共同努力下,以Docker为核心开发了 “云”。 那是不平凡的首次亮相。
有什么大不了的?
深入研究,Docker允许将应用程序隔离到容器中,并提供有关它们生存所需的确切说明,可以轻松地在机器之间移植。 虚拟机也允许完全相同的事情,并且已经存在诸如Chef和Puppet之类的许多其他工具,以使这些配置的构建可移植且可再现。
尽管Docker与这两者相比都具有更简化的结构,但造成中断的真正领域是资源效率。
如果要运行30个Docker容器,则可以在单个虚拟机上全部运行它们。 要运行30个虚拟机,您必须引导至少具有最低可用资源要求的30个操作系统,然后再将虚拟机管理程序分解为可在基本OS上运行的虚拟机。
仅假设您要使用最少256M的VM,您将使用具有30个不同OS内核来管理资源的7.5G RAM。 使用Docker,您可以为一个VM分配大量RAM,并拥有一个OS来管理那些相互竞争的资源……并且您可以在基本操作系统上完成所有这些工作,而无需完全参与昂贵的虚拟机管理程序。
现在,所有这些听起来对单个计算机上的竞争资源都很好,但是一对一的比较又如何呢? Boden Russell正是这样做的: 对Docker vs KVM进行基准测试 。 Docker赢得了26比1的性能提升。
要记住的一个关键因素是,由于与Linux内核的紧密集成,Docker能够执行其操作。 它可以在低水平上提供显着的效率,因此,Docker不能(当前)替代Windows,OS X等虚拟机。在非Linux机器上运行Docker容器时,它们将在内部运行通过boot2docker虚拟机。
这些类型的效率提升可与亚马逊等云提供商并在每小时出售的虚拟机上将性能提高26比1的产品相提并论。 对于他们的业务而言,这是一个巨大的推动力,因为您突然就能以相同的价格做更多的事情。 无需为需要部署的每个隔离应用程序购买两个虚拟机(以实现负载平衡/可用性),您只需将三个更大的VM群集在一起,然后将所有虚拟机部署到其中,实际的处理器限制就可以了。
当企业围绕云迁移制定成本效益决策时,这会极大地推动云提供商的发展……从而产生了混乱。
Docker实现一致的环境
Docker如此具有破坏性的另一个原因是可移植性。 至此,我们主要讨论了云提供程序,但是使用了较早的示例,即需要30个容器才能运行30个虚拟机……请考虑您的开发计算机。
随着微服务在开发领域的爆炸式增长,很有可能在笔记本电脑上进行开发会涉及同时启动其中几种服务才能正常工作。 Vagrant在每个VM的基础上提供了帮助,但是如果我需要启动四个或五个不同的微服务以在本地工作,这意味着我需要在笔记本电脑上运行四个或五个虚拟机,然后再进行其他工作。 使用Docker,可以简化为更易于管理的单个VM。
复制在开发中建立的生产所面临的永恒挑战突然变成现实。 容器本身可以在与机器上的其他容器对话的许可下启动。 每个端口都可以拥有自己的单独端口,这些端口可以公开开放,甚至可以共享基本操作系统的资源。
这就是Docker在启用持续集成,交付和部署管道方面提供巨大帮助的原因。 实际情况如下:
- 您的开发团队能够在易于编写的Dockerfile中为微服务创建复杂的需求。
- 将代码推送到您的git repo。
- 让CI服务器将其拉下并构建EXACT环境,该环境将用于生产环境中以运行测试套件,而无需完全配置CI服务器。
- 完成后将其全部拆除。
- 将其部署到测试人员的暂存环境中,或仅通知测试人员,以便他们可以运行单个命令以在本地配置和启动环境。
- 放心地将您在开发,测试和过渡到生产中所拥有的一切完全滚动,而无需担心机器配置。
许多不同的单独语言已采取步骤以在其语言的泡泡内实现这种类型的工作流程。 例如,Java拥有容器化的应用程序服务器已有十多年了,但是Docker在所有基于Linux的语言中都启用了它。
那……很大。
Docker不会消失
跳上“外观,新技术流行语”潮流很容易,但是Docker仍然存在。 该行业正在全力以赴地对该技术进行重大投资,并且正在Swift采用。
当像Amazon这样的公司发布自己的容器服务时, 像Tutum这样的公司利用容器的可移植性来创建一个平台,该平台允许您在AWS,Microsoft Azure,Digital Ocean的任何云提供商上使用Docker,甚至可以在您的服务器上自定义拥有。 顺便说一下,Tutum最近刚刚被Docker收购 。
这就是Docker改变游戏规则的原因。 它解决了很多问题,这些问题阻碍了团队有效地合作,并在降低成本的同时做到了。
翻译自: https://www.javacodegeeks.com/2015/11/why-docker.html