注册

为什么要使用Docker和容器


1981年出版的一本书《Nailing Jelly to a Tree》描述了软件是“模糊的,难以把握的”。这在1981年是真实的,四十年后也同样如此。无论是你购买的应用程序还是自己构建的应用程序,软件部署、管理和运行仍然很困难。


Docker容器提供了一种把握软件的方法。你可以使用Docker将应用程序封装起来,以便处理其部署和运行时的问题,如:如何在网络上公开它,如何管理其对存储、内存和I/O的使用,如何控制访问权限等等。这些问题都在应用程序本身之外处理,并以一种在所有“容器化”应用程序中保持一致的方式处理。你可以在任何安装了Docker运行时的兼容操作系统主机(Linux或Windows)上运行Docker容器。


除了这种方便的封装、隔离、可移植性和控制之外,Docker还提供了许多其他好处。Docker容器很小(几兆字节),启动速度很快,具有自己内置的版本控制和组件重用机制,可以通过公共Docker Hub或私有仓库轻松共享。


Docker容器也是不可变的,这既有安全性又有操作上的好处。对容器的任何更改都必须部署为一个全新的、版本不同的容器。


在本文中,我将探讨Docker容器如何使构建和部署软件更容易,容器解决的问题,何时容器才是正确的解决方案,何时不是。




在Docker容器之前


多年来,企业软件通常是部署在“裸机”上(即安装在具有对底层硬件完全控制的操作系统上)或虚拟机上(即安装在与其他“客户”操作系统共享底层硬件的操作系统上)。自然地,安装在裸机上使得软件难以移动和更新,这两个限制使得IT难以敏捷地响应业务需求的变化。


然后,虚拟化出现了。虚拟化平台(也称为“虚拟机管理程序”)允许多个虚拟机共享单个物理系统,每个虚拟机以隔离的方式模拟整个系统的行为,包括其自己的操作系统、存储和I/O。IT现在可以更有效地响应业务需求的变化,因为虚拟机可以克隆、复制、迁移和启动或关闭以满足需求或节约资源。



虚拟机也有助于降低成本,因为更多的虚拟机可以合并到更少的物理机器上。运行旧应用程序的遗留系统可以转换为虚拟机,并进行物理退役以节省更多的资金。


但是虚拟机仍然存在一些问题。虚拟机很大(千兆字节),每个虚拟机都包含一个完整的操作系统。只有很多虚拟化应用程序可以合并到单个系统上。分配虚拟机仍然需要相当长的时间。最后,虚拟机的可移植性有限。在某个点之后,虚拟机无法提供快速移动的企业所需的速度、敏捷性和节省成本。




Docker容器的好处


容器的工作方式有点像虚拟机,但更加具体和细粒度。它们将单个应用程序及其依赖项(应用程序运行所需的所有外部软件库)与底层操作系统和其他容器隔离开来。


所有容器化的应用程序共享一个公共操作系统(Linux或Windows),但它们彼此之间与整个系统隔离开来。操作系统提供所需的隔离机制,使这种隔离发生。Docker将这些机制包装在一个方便的接口。


Docker容器的好处在许多地方体现。以下是一些Docker和容器的主要优势:


1、Docker 可以更有效地利用系统资源


容器化应用程序的实例使用的内存比虚拟机少得多,它们启动和停止更快,并且可以在它们的主机硬件上更密集地打包。所有这些都意味着 IT 开支更少。


成本节省将根据所使用的应用程序和它们可能的资源密集程度而异,但容器无疑比虚拟机更有效率。还可以节省软件许可证的成本,因为您需要更少的操作系统实例来运行相同的工作负载。


2、Docker 可以加快软件交付周期


企业软件必须快速响应各种不断变化的情况。这意味着需要轻松扩展以满足需求,并且需要轻松更新以添加业务所需的新功能。


Docker容器可以轻松地将具有新业务功能的新版软件快速投入生产,并在需要时快速回滚到以前的版本。它们还可以更轻松地实施蓝/绿部署等策略。


3、Docker 可以实现应用程序的可移植性


在防火墙后面运行企业应用程序很重要,为了保持紧密和安全; 或者在公共云中,以便于公众访问和高弹性的资源。因为Docker容器封装了应用程序运行所需的所有内容(并且只包含那些内容),所以它们允许应用程序在环境之间轻松穿梭。任何安装了Docker运行时的主机,无论是开发人员的笔记本电脑还是公共云实例,都可以运行Docker容器。


4、Docker 在微服务架构中表现出色


Docker 容器是轻量级、可移植和自包含的,使得更容易按照前瞻性的思路构建软件,这样您就不会试图用昨天的开发方法来解决明天的问题。


容器使得实现微服务等软件模式更加容易,其中应用程序由许多松散耦合的组件构成。通过将传统的“单块式”应用程序分解为单独的服务,微服务允许业务应用程序的不同部分可以分别进行扩展、修改和维护——如果符合业务需求,可以由不同的团队在不同的时间表上进行。


容器不是实现微服务的必要条件,但它们非常适合微服务方法和敏捷开发流程。




容器并不是万能的


需要记住的是,与任何软件技术一样,容器并不是万能的。Docker 容器本身不能解决所有问题。


特别是以下几点:


1、Docker 无法解决软件的安全问题


容器中的软件默认情况下可能比在裸机上运行的软件更安全,但这就像说锁着门的房子比开着门的房子更安全一样。这并没有说明社区的状况、诱人偷盗的贵重物品的可见存在、居住在那里的人的日常生活等等。容器可以为应用程序添加一层安全性,但只能作为在上下文中保护应用程序的一般计划的一部分。


2、Docker 不能神奇地将应用程序变成微服务


如果将现有的应用程序容器化,可以减少其资源消耗并使其更容易部署。但它并不会自动更改应用程序的设计或其与其他应用程序的交互方式。这些好处只能通过开发人员的时间和努力来实现,而不仅仅是将所有内容移动到容器中的命令。


如果将传统的单块式或面向服务的应用程序放入容器中,最终得到的是一个老旧的应用程序在容器中运行。这对你的工作没有任何帮助。


容器本身没有组合微服务式应用程序的机制。需要更高级别的编排来实现这一点。Kubernetes 是这种编排系统的最常见示例。Docker swarm 模式也可以用于管理多个 Docker 主机上的许多 Docker 容器。


3、Docker 不是虚拟机的替代品


容器的一个误解是它们使虚拟机过时了。许多以前在虚拟机中运行的应用程序可以移动到容器中,但这并不意味着所有应用程序都可以或应该这样做。例如,如果你在一个有严格监管要求的行业中,可能无法将容器替换为虚拟机,因为虚拟机提供的隔离性比容器更强。


作者:Squids数据库云服务提供商
链接:https://juejin.cn/post/7226153074078416933
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

0 个评论

要回复文章请先登录注册