了解轻量级,可移植,独立的Docker容器如何改进软件开发,应用程序部署和业务敏捷性
1981年出版的一本《Nailing Jelly to a Tree》的书将软件描述为“模糊不清,难以牢牢掌握。”1981年就是如此,自那以后近四十年来也是如此。软件,无论是您购买的应用程序还是您自己构建的应用程序,仍然难以部署,难以管理且难以运行。Docker容器提供了一种控制软件的方法。您可以使用Docker来封装应用程序,其部署和运行时出现问题,像如何在网络上公开它,如何管理其对存储和内存的使用以及I / O,如何控制访问权限等,在应用程序本身之外,以及在所有“容器化”应用程序中保持一致的方式。 您可以在安装了Docker运行时的任何兼容OS的主机(Linux或Windows)上运行Docker容器。除了这种方便的封装,隔离,可移植性和控制之外,Docker还提供许多其他好处。 Docker容器很小(兆字节)。 它们立即运行, 它们有自己的内置机制,用于版本控制和组件重用。 它们可以通过公共Docker Hub或私有存储库轻松共享。在本文中,我将探讨Docker容器如何使构建和部署软件更容易,容器解决的问题,何时容器才是正确的解决方案,何时不是。
在Docker容器之前
多年以来,企业软件通常部署在“裸机”(即安装在完全控制底层硬件的操作系统上)或虚拟机中(即安装在共享底层硬件的操作系统或其他“客户”操作系统上)。当然,在裸机上安装使得软件难以移动并且难以更新 – 这两个限制使得IT难以灵活地响应业务需求的变化。
然后虚拟化出现了。 虚拟化平台(也称为“虚拟机管理程序”)允许多个虚拟机共享单个物理系统,每个虚拟机以独立的方式模拟整个系统的行为,并具有自己的操作系统,存储和I / O.。 现在,IT可以更有效地响应业务需求的变化,因为可以克隆,复制,迁移虚拟机以及向上或向下旋转以满足需求或节省资源。虚拟机还有助于降低成本,因为可以将更多虚拟机整合到更少的物理机器上。运行老应用程序的旧系统可以转换为虚拟机运行并实现旧设备的退役,以节省更多资金。但虚拟机仍然存在一些问题。虚拟机很大(千兆字节),每个虚拟机都包含一个完整的操作系统。 只有将这些虚拟化应用程序可以合并到一个系统上。 配置VM仍然需要相当长的时间。最后,VM的可移植性是有限的。 在某一点之后,虚拟机无法提供快速发展的业务所要求的速度,灵活性和节省成本。
Docker容器的好处
容器的工作方式有点像虚拟机,但更具体,更细致。 它们隔离了单个应用程序及其依赖项 – 应用程序运行所需的所有外部软件库 – 来自底层操作系统和其他容器。 所有容器化应用程序共享一个通用的操作系统(Linux或Windows),但它们彼此区分开来,并且与整个系统区分开来。Docker容器的好处出现在很多地方。 以下是Docker和容器的一些主要优点:
1) Docker可以更有效地使用系统资源
容器化应用程序的实例使用的内存远远少于虚拟机,它们可以更快地启动和停止,并且可以在主机硬件上更密集地打包它们。 所有这些都相当于减少对IT的支出。成本节约将取决于正在使用的应用程序以及它们可能的资源密集程度,但容器总是比VM更有效。还可以节省软件许可证的成本,因为您需要更少的操作系统实例来运行相同的工作负载。
2) Docker可实现更快的软件交付周期
企业软件必须快速响应不断变化的条件。 这意味着既可以轻松扩展以满足需求,又可以轻松更新以根据业务需要添加新功能。Docker容器可以轻松地将具有新业务功能的新版软件快速投入生产,并在需要时快速回滚到以前的版本。它们还可以更轻松地实施蓝/绿部署等策略。
3) Docker支持应用程序可移植性
在防火墙后面运行企业应用程序很重要,为了保持紧密和安全; 或者在公共云中,以便于公众访问和高弹性的资源。因为Docker容器封装了应用程序运行所需的所有内容(并且只包含那些内容),所以它们允许应用程序在环境之间轻松穿梭。任何安装了Docker运行时的主机,无论是开发人员的笔记本电脑还是公共云实例,都可以运行Docker容器。
4) Docker促进架构微服务
轻量级,可移植且独立的Docker容器使得在前瞻性思路中构建软件变得更加容易,因此您不会试图用昨天的开发方法来解决明天的问题。其中一个软件模式,容器使得微服务更容易,其中应用程序由许多松散耦合的组件构成。通过将传统的“单机”应用程序分解为单独的服务,微服务允许业务应用程序由不同的团队单独扩展,修改和提供服务。容器不需要实现微服务,但它们非常适合微服务方法和敏捷开发过程。
Docker容器无法解决的问题
关于容器的第一个建议也是适用于任何软件技术的建议:这不是一个灵丹妙药。 Docker容器本身无法解决所有问题。 特别是:
1) Docker无法解决您的安全问题
默认情况下,容器中的软件比裸机上运行的软件更安全,但这就像说锁门的房子比门打开的房子更安全。容器可以为应用程序添加一层安全性,但仅作为在上下文中保护应用程序的一部分。
2) Docker不会将应用程序神奇地转变为微服务
如果您将现有应用程序容器化,则可以减少其资源消耗并使其更易于部署。 但它不会自动更改应用程序的设计,也不会自动更改应用程序与其他应用程序的交互方式。这些好处只能通过开发人员的时间和精力来实现,而不仅仅是将所有内容都移到容器中。将一个旧式的单片或SOA风格的应用程序放在一个容器中,你最终会得到一个容器中的旧应用程序。这对你的工作没有任何帮助。
3) Docker不是虚拟机的替代品
一个持久的容器神话是它们使VM过时了。过去在VM中运行的许多应用程序都可以移动到容器中,但这并不意味着它们都可以或应该。 例如,如果您所处的行业有严格的法规要求,您可能无法将VM替换为容器,因为VM提供的隔离性比容器更强。
原文链接:https://www.infoworld.com/article/3310941/why-you-should-use-docker-and-containers.html