为什么你应该使用Docker和容器
Posted CIO信息主管D1net
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么你应该使用Docker和容器相关的知识,希望对你有一定的参考价值。
关键讯息,D1时间送达!
了解轻量级的、可移植的、自包含的Docker容器是如何改进软件开发、应用程序部署和业务敏捷性的。
1981年出版的一本名为《将果冻钉在树上》的书将软件描述为是一种“模糊不清且难以把控的东西”。其实,不仅在1981年的时候是如此,近40年来也一直是如此。软件,无论是你购买的应用程序还是你自己构建的应用程序,都很难部署、管理和运行。
现在,Docker容器提供了一种新的控制软件的方法。您可以使用Docker来包装应用程序,以便处理应用程序的部署和运行时问题——包括如何在网络上公开应用程序,如何管理应用程序对存储和内存以及I/O的使用,如何控制应用程序对外的访问权限,以及如何让所有在容器中的应用程序保持一致。您可以在安装了Docker runtime的任何兼容主机(Linux或Windows)上运行Docker容器。
除了这种方便的封装,隔离,可移植性和控制之外,Docker还提供了许多其他好处。 Docker容器很小(兆字节),并且启动迅速。它们有自己内置的版本控制和组件重用的机制。它们可以轻松的通过公共Docker Hub或私有存储库进行共享。
在本文中,我将探讨Docker容器是如何使软件的构建和部署变得更加容易的——包括容器可以解决的问题,它们是如何解决这些问题的,以及何时才是使用容器的最佳时机。
在Docker容器出现之前
多年来,企业软件通常部署在“裸机”(即安装在对底层硬件具有完全控制权的操作系统上)或虚拟机(即安装在与其他客户机操作系统共享底层硬件的操作系统上)上。显然,在裸机上安装会让软件很难移动,也很难更新——这两个限制使得传统IT很难灵活应对业务需求的变化。
后来出现了虚拟化。虚拟化平台(也称为“虚拟机管理程序”)允许多个虚拟机共享一个物理系统,每个虚拟机以独立的方式模拟整个系统的行为,包括自己的操作系统、存储和I/O。这样,IT可以更有效地响应业务需求的变化,因为可以克隆,复制,迁移虚拟机以及快速的增减资源以满足需求或节省资源。
虚拟机也有助于降低成本,因为更多虚拟机可以整合到更少的物理机器上。运行旧应用程序的遗留系统可以转换为虚拟机并在物理上退役,以节省更多资金。
但是虚拟机仍然存在一些问题。虚拟机是本身就很巨大(千兆字节),每一个虚拟机都包含一个完整的操作系统。因而能够整合到单个系统中的虚拟化应用程序非常有限。另外,调配虚拟机仍然需要相当长的时间。所以,虚拟机的可移植性依然有限。到达一定程度以后,虚拟机便无法再满足快速发展的企业所需求的速度、灵活性和低成本了。
Docker容器的好处
容器的工作方式有点像虚拟机,但更具体和精细。它们将单个应用程序及其依赖项(应用程序需要运行的所有外部软件库)从底层操作系统和其他容器中隔离开来。所有容器化的应用程序都共享一个单一的通用操作系统(Linux或Windows),但它们彼此之间以及整个系统之间是分开的。
Docker容器的好处在很多地方都有体现。以下是Docker和容器的一些主要优点:
Docker可以更有效地使用系统资源
容器化应用程序的实例使用的内存比虚拟机少得多,它们启动和停止的速度更快,可以在主机硬件上更密集地进行打包。所有的这些都意味着它能够极大的减少IT开支。
节省的成本将取决于应用程序的使用情况以及它们对资源使用的密集程度,但容器总是能够比虚拟机更高效。相应的,这也节省了软件许可证的成本,因为运行相同的工作负载需要更少的操作系统实例。
Docker支持更快的软件交付周期
企业软件必须对不断变化的环境做出快速反应。这意味着需要一个既易于扩展以满足需求,又易于更新以根据业务需要添加新功能的运行环境。
Docker容器使将具有新业务特性的新版本软件快速投入生产——如果需要,也可以快速回滚到以前的版本。它们还使得实施蓝/绿部署等战略变得更加容易。
Docker支持应用程序的可移植性
有时选择在哪里运行企业应用程序是至关重要的——在防火墙后面,可以让应用变得更加可靠和安全;在公共云中,可以提高应用的可访问性和资源弹性。而Docker容器封装了应用程序运行所需要的所有东西,所以它们能够允许应用程序在不同的环境之间轻松穿梭。所有安装了Docker runtime的主机——无论是开发人员的笔记本电脑还是公共云实例——都可以运行Docker容器。
Docker让微服务架构更加闪耀
轻量级的、可移植的、独立的Docker容器使得构建前瞻性软件架构变得更加容易,因此您不需要试图使用昨天的开发方法来解决明天的问题。
其中的一种受益于此的软件开发模式就是微服务,它需要由许多松散耦合的组件来共同组成一个应用程序。通过将传统的“单一的”应用程序分解成许多独立的服务,微服务允许业务线应用程序的不同部分由独立的团队和独立的时间轴被独立地扩展、修改和服务——只要它能够满足业务需求。
容器不需要实现微服务,但是它非常适合微服务方法和敏捷开发。
Docker容器无法解决的问题
关于容器,首先要记住的是:它也并不是万能的。Docker容器本身并不能解决所有问题。特别是:
Docker无法解决您的安全问题
在默认情况下,容器中的软件确实比在裸机上运行的软件更安全,但这就好比说,锁着门的房子比不锁着门的房子更安全。但这也需要视情况而定。容器可以为应用程序添加一层保护层,但也是仅作为在上下文中保护应用程序的一般程序的一部分而已。
Docker不会将应用程序神奇地转变为微服务
如果您将现有应用程序容器化,的确可以减少其资源消耗并使其更易于部署。但它不会自动更改应用程序的设计,也不会自动更改其与其他应用程序的交互方式。这些东西只能通过开发人员的时间和努力来实现,而不是通过将所有内容都转移到容器中。
将一个老式的独立的或SOA风格的应用程序放在容器中,你最终会得到也只是一个容器中的旧应用程序。这对你的工作没有任何帮助;如果说有什么区别的话,那就是它可能会让它变得不那么有用。
Docker不是虚拟机的替代品
关于容器的一个持久的话题是,它们最终将淘汰虚拟机。许多以前在虚拟机中运行的应用程序都可以被移动到容器中,但这并不意味着所有的应用程序都可以或应该被移动到容器中。例如,如果您所在的行业具有严格的监管要求,那么您可能无法将虚拟机替换为容器,因为虚拟机提供的隔离性比容器更强。
Docker容器的使用
传统企业的开发工作常常因其保守的文化和对变化的麻木迟钝而声名狼藉。企业开发人员也一直对这些限制感到恼火——包括IT强加给他们的限制,以及整个企业对他们的要求。然而,Docker和容器为开发人员提供了更多他们所渴望的自由,同时提供了新的构建业务应用程序的方法,让他们能够快速响应不断变化的业务条件。
(来源:企业网D1Net)
如果您在企业IT、网络、通信行业的某一领域工作,并希望分享观点,欢迎给企业网D1Net投稿 投稿邮箱:editor@d1net.com
点击蓝色字体关注
以上是关于为什么你应该使用Docker和容器的主要内容,如果未能解决你的问题,请参考以下文章
Docker 学习总结(70)—— 从正在运行的 Docker 容器创建镜像
Docker 学习总结(76)—— 所有项目的容器化部署的基础镜像都应该选择 alpine 吗?
Docker 学习总结(76)—— 所有项目的容器化部署的基础镜像都应该选择 alpine 吗?