跨硬件资源采用多个软件负载可以更有效地利用硬件投资,并提高应对硬件故障的稳定性。通过允许可以更新集中式容器配置,然后将其推送到执行环境的方案,从而使软件工作负载本身的维护和演化更加容易。应用于传统企业IT的容器化技术已成为现代云计算技术的关键推动力。
虚拟机
在通常情况下,可以将容器视为轻量级虚拟机。完整的虚拟机能够完全仿真主机上的目标硬件层,其中包括CPU指令集、外围设备集等。虚拟机具有很高的可移植性,但由于在主机内模拟目标计算机的各个方面而导致大量开销。与要模拟的目标计算机相比,这实际上要求对主机进行过度指定。在许多情况下,这种仿真水平是不必要的。
基于虚拟机监控程序的虚拟化所需的主机资源少于完整的虚拟机。虚拟机管理程序为每个执行环境提供了基础硬件的私有视图,但是大多数情况下它都绑定到基础主机架构,因此通过将硬件架构限制为主机架构,它确实获得了一些额外的效率。在工业物联网(IIoT)应用程序中,通常不需要由完整虚拟机或虚拟机管理程序提供的抽象和隔离级别。
容器并不是完整的虚拟机,而是在主机的约束和架构下运行。这样,容器能够与主机的CPU架构和低级操作系统(内核)接口,从而直接共享主机的硬件和内核资源。
容器取决于主机的底层操作系统,但是可以封装并提供高层操作系统(用户空间)的一部分。这允许在容器内的应用程序被构建并针对一组固定的版本化操作系统资源进行固定运行。
分区
大多数系统管理员或UNIX应用程序开发人员可能熟悉“依赖地狱”的概念,这使所有系统资源可用以使应用程序运行。在配置为在同一服务器上运行的所有应用程序之间维护多个应用程序依赖关系,这通常是一项棘手且乏味的工作。容器允许每个应用程序将一组受控的依赖项与应用程序捆绑在一起,以便这些应用程序可以独立地具有稳定的执行环境,并与同一服务器上的其他容器化应用程序进行分区和隔离。为了方便起见,甚至应用程序更新也经常打包和部署为容器更新。因此,容器在目标机器上的应用程序组件之间提供了强大的分区。
增强安全性
由于容器是在容器引擎的场景中执行的,因此它可以通过约束容器引擎本身来增强对应用程序的安全性策略和约束。例如,在Linux托管环境中,使用“cgroups”,进程空间隔离、文件系统控件、内核级强制访问控件之类的机制,可以强制限制容器引擎在这些控件下运行,例如限制内存、CPU使用率、对文件系统特定部分的访问、对网络资源的访问,或仅允许某些事先批准的内核操作子集。