但是什么是容器?他们有什么优势?它们适合您的软件商店和嵌入式产品吗?他们会改进开发、测试和部署吗?有缺点吗?在本文中,我们将从几个不同的角度讨论容器,以帮助您自己回答这些问题。
容器定义
容器起源于 Linux chroot 和命名空间功能。虽然它们在一些非 Linux 环境中可用,但容器在 Linux 系统中最常见,所以这就是我们在这里关注的内容。
容器有时被称为“包装抽象”。这是因为它们可以将程序及其所有依赖项打包到一个单独的、隔离的可执行环境中。容器也被描述为轻量级虚拟机。
这些描述是准确的,但不够充分。容器确实用于包装应用程序和/或服务及其所有依赖项,并且它们确实隔离了在同一硬件上运行的多个软件组件。这些描述也没有充分说明容器还可以做许多其他事情:
容器将应用程序与其运行所需的所有文件系统部分捆绑在一起:应用程序在运行时所需的所有二进制可执行文件、库、实用程序、数据和配置文件。
它们为包提供了专用的命名空间、内存和网络视图,将其与系统的其余部分隔离开来。这种隔离有利于开发、测试、部署和运行时安全。
容器不需要具有虚拟化支持的高端硬件,也不需要管理程序系统常见的完整操作系统堆栈、可引导磁盘映像和虚拟化设备。
它们重量轻,非常适合嵌入式系统。您只需将它们添加到您的 Linux 操作系统映像中,对系统空间和电源要求几乎没有影响。
容器还是管理程序?
管理程序可以在并行虚拟机中运行多个完全独立的操作系统,彼此完全隔离。为此,他们需要支持特殊指令集扩展的硬件。这会使用更多资源,因为操作系统开销被添加到每个虚拟机。有效地访问外围设备也是一个挑战,同样高度依赖于特定硬件平台的功能。
相比之下,容器允许独立的应用程序在同一 Linux 主机操作系统上运行并共享其内核。内核命名空间功能用于为这些应