容器化是软件开发的一种方法,通过该方法可将应用程序或服务、其依赖项及其配置(抽象化为部署清单文件)一起打包为容器映像。 可将容器化应用程序作为单元进行测试,并将其作为容器映像实例部署到主机作系统(OS)。
正如运输容器允许货物通过船舶、火车或卡车运输,无论货物在里面是什么,软件容器都充当可包含不同代码和依赖项的软件部署的标准单元。 这样容器化软件,使开发人员和 IT 专业人员可以在无需或几乎无需修改的环境中部署它们。
容器还会在共享 OS 上相互隔离应用程序。 容器化应用程序在容器主机之上运行,而容器主机则运行在 OS(Linux 或 Windows)上。 因此,容器的占用空间明显小于虚拟机(VM)映像。
每个容器都可以运行整个 Web 应用程序或服务,如图 2-1 所示。 在此示例中,Docker 主机是容器主机,App1、App2、Svc 1 和 Svc 2 是容器化应用程序或服务。
图 2-1. 在容器主机上运行的多个容器
容器化的另一个优势在于可伸缩性。 可以通过为短期任务创建新容器来快速横向扩展。 从应用程序的角度来看,实例化映像(创建容器)类似于实例化服务或 Web 应用等进程。 但是,为了可靠性,在多个主机服务器上运行同一映像的多个实例时,通常希望每个容器(映像实例)在不同的主机服务器或不同容错域中的 VM 中运行。
简言之,容器提供在整个应用程序生命周期工作流中隔离、可移植性、敏捷性、可伸缩性和控制的优势。 最重要的好处是开发与 Ops 之间提供的环境隔离。