原文请参考8 Ways to Use Docker in the Real World – Flux7 Blog, 译文去除了不太相关的内容。
在我们讨论 Docker 的使用场景之前,先来看看 Docker 这个工具有什么特别的地方吧。
在我们讨论 Docker 的使用场景之前,先来看看 Docker 这个工具有什么特别的地方吧。Docker 提供了轻量级的虚拟化,它几乎没有任何额外开销,这个特性非常酷。首先你在享有 Docker 带来的虚拟化能力的时候无需担心它带来的额外开销。其次,相比于虚拟机,你可以在同一台机器上创建更多数量的容器。Docker 的另外一个优点是容器的启动与停止都能在几秒中内完成。Docker 公司的创始人 Solomon Hykes 曾经介绍过 Docker 在单纯的 LXC 之上做了哪些事情,你可以去看看。下面是我总结的一些 Docker 的使用场景,它为你展示了如何借助 Docker 的优势,在低开销的情况下,打造一个一致性的环境。
这是 Docker 公司宣传的 Docker 的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),Docker 在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,同一个 Docker 的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。
前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。而每一个中间环境都有自己微小的差别,Docker 给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。
这就带来了一些额外的好处:Docker 能提升开发者的开发效率。如果你想看一个详细一点的例子,可以参考 Aater 在DevOpsDays Austin 2014 大会或者是 DockerCon 上的演讲。不同的开发环境中,我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境,二是我们想快速搭建开发环境。理想状态中,要达到第一个目标,我们需要将每一个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而,我们却不想每次都需要网络连接,每次重新编译的时候远程连接上去特别麻烦。这就是 Docker 做的特别好的地方,开发环境的机器通常内存比较小,之前使用虚拟的时候,我们经常需要为开发环境的机器加内存,而现在 Docker 可以轻易的让几十个服务在 Docker 中跑起来。
有很多种原因会让你选择在一个机器上运行不同的应用,比如之前提到的提高开发效率的场景等。我们经常需要考虑两点,一是因为要降低成本而进行服务器整合,二是将一个整体式的应用拆分成松耦合的单个服务(译者注:微服务架构)。如果你想了解为什么松耦合的应用这么重要,请参考 Steve Yege 的这篇论文,文中将 Google 和亚马逊做了比较。
正如通过虚拟机来整合多个应用,Docker 隔离应用的能力使得 Docker 可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker 可以比虚拟机提供更好的服务器整合解决方案。
Docker 提供了很多的工具,这些工具不一定只是针对容器,但是却适用于容器。它们提供了很多的功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试 Bug。你可以在《Docker拯救世界》
另外一个 Docker 有意思的使用场景是在多租户的应用中,它可以避免关键应用的重写。我们一个特别的关于这个场景的例子是为 IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间,也浪费金钱。使用 Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,当然这一切得益于 Docker 环境的启动速度和其高效的diff
命令。你可以在这里了解关于此场景的更多信息。
在虚拟机之前,引入新的硬件资源需要消耗几天的时间。虚拟化技术(Virtualization)将这个时间缩短到了分钟级别。而 Docker 通过为进程仅仅创建一个容器而无需启动一个操作系统,再次将这个过程缩短到了秒级。这正是 Google 和 Facebook 都看重的特性。
领取专属 10元无门槛券
私享最新 技术干货