容器化应用是在称为容器的独立代码包中运行的应用。容器将应用在任何主机操作系统上运行时可能需要的所有依赖项(例如库、二进制文件、配置文件和框架)整合到一个简单的可执行文件中。
应用的容器化过程可将不同功能与硬件依赖项和其他软件分离开来,从而提高应用开发的速度、效率和安全性。容器可在任何主机操作系统上运行,并与其他软件和硬件对象隔离开来,于是它们得以成为一种多功能应用构建工具,只需构建一次,应用即可在任何位置运行。
从 Google 搜索到 YouTube 和 Gmail,Google 的所有产品均通过容器运行。开源平台 Kubernetes 和 Knative 由 Google 开发,是管理容器和应用时广泛使用的一些工具。
隔离
由于每个容器化应用都存在于独立于其他应用和系统组件的隔离环境中,因此应用内的故障不会影响其他应用或本地系统,这样可以限制 bug 突发事件的范围。
可移植性
容器化应用独立于操作系统运行,因此可以移植到几乎任何环境,例如物理服务器、虚拟机、开发者的个人机器或云端。
轻量级
与虚拟机不同,容器没有附带操作系统版本;因此,与其他虚拟化方法相比,容器更加精简、高效。
提升效率
容器化应用可以共用机器的计算内核和资源,而一个容器内的应用层可以由多个容器共用。因此,容器化应用需要的资源更少,支持在同一机器或虚拟环境中运行多个容器。
可伸缩性
您可以快速添加其他容器实例,以处理增加的应用负载。
容器化应用的运作原理是运行一个可执行的软件包(容器),其中包含应用在主机操作系统上运行所需的所有应用依赖项。容器化应用包含多个对象,包括构成容器映像(随后由容器引擎运行)的所有应用组件(例如框架和库)。容器映像是容器系统的蓝图或架构。当应用运行时,映像内容将被复制到容器实例中,然后可在应用内任意数量的容器中使用。容器映像是基于名为 Open Container Initiative (OCI) 的业界标准创建的,有助于提高容器的可共享性和兼容性。
容器引擎是容器的运行时环境,也是执行容器化应用的平台。容器引擎接受通过客户端工具构建、管理和启动容器的命令。最常用的容器引擎是 Docker 或 CRI-O 等工具。
编排工具用于管理容器化应用,尤其是在具有多个容器的环境中。编排工具(如 Kubernetes),可部署、管理和扩缩容器
容器和虚拟机在功能上相似,但容器使用的资源往往更少,并且更灵活。
虚拟机允许多个应用和操作系统共用一台物理计算机或服务器的资源并同时运行(例如,共用同一台计算机的 Windows 和 Linux)。虚拟机包含其文件和依赖项,及其自己的操作系统副本。
容器不像虚拟机那样携带操作系统副本。因此,容器与虚拟机之间的主要区别在于容器化可以更高效地使用计算资源。容器运行时安装在计算机或服务器的现有操作系统上,以便所有容器共用同一操作系统。
从最基本的层面来讲,容器分为两种类型:系统容器和应用容器。
应用容器是通常运行单个进程的无状态解决方案。我们所说的容器化应用,就是它们运行应用容器,其中每个容器都处理一个进程,由 Kubernetes 等工具编排多个容器。
市场上的应用容器比比皆是。Docker 被认为是最受欢迎的容器,当然还有一些其他类别。容器的开源开发由 OCI 管理。
系统容器(也称为操作系统容器)较旧,其功能与虚拟机非常相似,但计算开销不同。它可以作为一个独立的系统运行,不包含容器映像,也不需要专用软件。系统容器通常用于旧式单体式应用。
以下是容器化应用的一些常见引擎和工具类型:
最受欢迎的容器化开源平台。Docker 支持创建和操作基于 Linux 的容器。
LXC 是 LinuxContainers.org 的开源项目,允许应用使用单个 Linux 内核作为操作系统,同时运行多个 Linux 系统。
rkt 也称为 Rocket,是一种基于应用的容器引擎,它支持对容器进行精细控制,也可作为 Docker 容器系统内的特定组件。
容器管理平台 Kubernetes 的容器运行时接口 (CRI),用于支持与 OCI 兼容的运行时。在使用 Kubernetes 时通常用于替代 Docker。