Unikernels 是一个新事物,我不太明白它们的用例是什么。
我能想到的任何用例都已经可以通过 Docker 容器得到满足。
那么 Unikernel 是用来做什么的呢?
答案1
容器与物理虚拟机管理程序上的其他容器共享内核空间。通常,unikernel 不会共享内核空间。所有功能差异基本上都是该根本差异的表现。
例如,容器的内核具有更大的内核空间攻击面,因为容器的内核是通用的:任何应用程序都可以在正确操作系统的任何容器中运行。unikernel 经过定制,仅包含正在运行的应用程序所需的子系统——仅那应用程序可以在适当的unikernel中运行,因此unikernel的攻击面大大减小。
此外,unikernel 可以更直接地访问底层硬件——因此它们比容器更高效(这也是由于内核尺寸更小,尽管这在很大程度上取决于特定虚拟机管理程序上运行的容器或 unikernel 数量)。此外,unikernel 传统上(这种情况正在改变)只能运行一进程,因此对于在传统单内核中运行的应用程序来说,分叉不是一个选项。
因此,unikernel 更安全、更快速;但更适合定制,因此通用性较差。它们适用于任何优先考虑效率和安全性而非操作系统重新利用和标准化的工作流程。