为什么要使用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和容器

虚拟机也有助于降低本钱,由于更多的虚拟机能够合并到更少的物理机器上。运转旧应用程序的留传体系能够转换为虚拟机,并进行物理退役以节约更多的资金。

但是虚拟机依然存在一些问题。虚拟机很大(千兆字节),每个虚拟机都包括一个完好的操作体系。只要很多虚拟化应用程序能够合并到单个体系上。分配虚拟机依然需求相当长的时刻。终究,虚拟机的可移植性有限。在某个点之后,虚拟机无法供给快速移动的企业所需的速度、敏捷性和节约本钱。


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 不是虚拟机的替代品

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


作者:Serdar Yegulalp

更多内容请关注公号“云原生数据库