文章图片
容器源于Linuxchroot和命名空间功能 。 虽然在一些非Linux环境中可以使用容器 , 但容器在Linux系统中是最常见的 , 所以这就是我们将在这里重点介绍的内容 。
容器有时被称为“包装抽象” 。 这是因为它们可以将一个程序及其所有依赖项打包到一个单独的、隔离的可执行环境中 。 容器也被描述为轻量级虚拟机 。
这些描述是准确的 , 但还不够 。 容器确实用于包装应用程序和/或服务及其所有依赖项 , 它们确实隔离了在同一硬件上运行的多个软件组件 。 这些描述也没有充分说明容器还有许多其他功能:
1.容器将应用程序与它需要操作的所有文件系统部件捆绑在一起:应用程序在运行时需要的所有二进制可执行文件、库、实用程序、数据和配置文件 。
2.它们为bundle提供了专用的名称空间、内存和网络视图 , 将其与系统的其余部分隔离开来 。 这种隔离有利于开发、测试、部署和运行时安全 。
3.容器不需要支持虚拟化的高端硬件 , 也不需要hypervisor系统通用的完整操作系统堆栈、可引导磁盘映像和虚拟化设备 。
4.它们重量轻 , 是嵌入式系统的理想选择 。 你只需将它们添加到Linux操作系统映像中 , 对系统空间和电源需求几乎没有影响 。
容器还是虚拟机监控程序?
虚拟机监控程序可以在相互完全隔离的并行虚拟机中运行多个完全独立的操作系统 。 为此 , 他们需要支持特殊指令集扩展的硬件 。 这会使用更多资源 , 因为操作系统开销会添加到每个虚拟机 。 有效地访问外围设备也是一个挑战 , 这在很大程度上取决于特定硬件平台的功能 。相反 , 容器允许独立的应用程序在同一个Linux主机操作系统上运行并共享其内核 。 内核名称空间特性用于为这些应用程序提供系统的受限视图 , 从而创建独立系统的外观 。 名称空间系统足够灵活 , 可以为应用程序提供一个独立的文件系统 , 但也可以让应用程序直接访问外围设备或网络 。 由于内核是共享的 , 所以所有容器都会看到相同的内核版本 。 但是 , 由于容器中的应用程序只是直接使用底层Linux操作系统 , 而没有仿真或虚拟化 , 因此容器无法承载非Linux操作系统 。 从积极的方面来看 , 这也意味着容器不需要特殊的硬件支持:如果现代Linux内核在目标硬件上运行 , 那么可以使用容器 。
使用虚拟机监控程序或容器 , 必须为目标平台构建应用程序 , 并在CPU上高效运行 。 可以模拟硬件平台来运行为其他体系结构编译的软件的虚拟机解决方案确实存在 。 然而 , 由于它们对性能的影响很大 , 因此它们不用于嵌入式系统 。
你应该使用容器吗?
容器提供了许多好处 , 但它们并不适用于每个开发环境或每个嵌入式系统 。
用于开发环境的容器
如果你只考虑你的开发环境 , 那么从容器中可以获得的收益和花费就不多了 。 一旦你完成了相对简单的学习过程 , 并且在开发人员、构建和QA机器上实现了容器 , 你将在资源调配、版本控制、测试和构建方面获得巨大的回报 。
我们建议逐步将容器合并到你的开发工作流程中 , 这样你就可以准备好将目标容器化 。
嵌入目标上的容器
如果你正在为具有8位或16位处理器、内存不足1MB或无法运行Linux的目标开发深度嵌入式应用程序 , 那么容器显然不是一个好办法 。 如果你正在为32位或64位嵌入式平台开发 , 那么问题就更加微妙了 。
- 任正非|任正非与孟晚舟的姓氏为什么不一样?
- 荷兰|苹果公司向荷兰“妥协”:将开放交友软件的第三方支付系统
- 恶意软件|报告称 2021 年 Linux 的恶意软件样本数量增加了 35%
- |为什么以前在飞机上不能开手机,而现在可以了?
- 家电业|为什么家电业要拒绝躺平敢于折腾?
- |日本手机为什么沦落了?
- 换手机为什么建议避开128GB的,原因主要有3点,懂的都懂
- 人类的工作会被AI取代吗?如果机器能够深度学习|为什么说AI能作巴赫的曲,却写不出村上春树的小说?
- 软件|想提高效率?这五款软件你需要了解
- 锐龙|为什么AMD只推出一款锐龙7 5800X3D?因为资源都优先给Milan-X了