在这篇文章中,我想介绍并分享一些Docker的实际应用案例。
在我们讨论Docker的使用场景之前,先来看看Docker这个工具有什么特别的地方吧。
Docker提供了轻量级的虚拟化,它几乎没有额外开销,这个特性非常酷。
首先你可以在享有Docker带来的虚拟化层的时候却不用担心因此而带来的额外开销。第二个优点是比之虚拟机,你能在单一机器上启动更多数量的容器。
另外一个强有力的影响是容器的启与停都能在几秒中完成。Docker公司的创始人, Solomon Hykes,曾经概括过Docker在单纯的LXC之上做了哪些事情。
下面这些Docker的使用场景,为你展示了如何借助Docker的强力,在非常低的额外开销的情况下,打造一个一致性的环境。
1. 简化配置
这是Docker公司宣传的Docker的主要使用场景。虚拟机的一个***好处是能在你的硬件设施上运行各种配置不一样的平台。Docker在降低额外开销的情况下提供了同样的功能。它能让你将你的运行环境和配置放在代码里面然后部署。同一个Docker的配置可以使用在不同的环境里面。这样就降低了硬件要求和应用环境之间耦合度。
2. 代码流水线管理
前一个场景对于管理代码的流水线起到了很大的作用。代码从开发者的机器到最终在生产环境上的部署,需要流过很多的中间环境。而每一个中间环境都有自己微小的差别,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环境的启动速度和其高校的对比命令是有关的。
你可以在这里了解关于此场景的更多信息。
8. 快速开发
在虚拟机之前,引入新的硬件资源需要耗费几天的时间。虚拟化技术将这个时间降到了几分钟,Docker通过只是为进程创建一个容器无需启动操作系统,将这个时间降到了几秒钟。这就是Google和Facebook都不得不用的黑科技。
你可以在你的数据中心创建销毁资源而无需担心重新启动的开销。通常数据中心的资源利用率为30%,依靠更加有效的资源分配将将这个数字提升不会很难。并且,创建一个新的实例能更加有效的实现资源分配。
还有更多的Docker的应用场景记录于各种文章里面。你可以在此发现更多的案例研究。
对于我们来说,使用Docker的动机永远是选择正确的工具应用到工作中。最有意思的部分是业务场景,然后我们在业务场景上发挥工具的***效能。