Docker 容器与 Unikernel 的比较

Docker Container compared with Unikernel

我最近用 docker 部署了一个小型 Haskell 应用程序,使用 "scratch-haskell" 作为基础映像。

然后我阅读了有关 Unikernels 和 HALVM 的内容。我有点困惑。

我的 docker 容器大约有 6MB 大。我猜 Unikernel(具有相同的 haskell 应用程序)的大小大致相同。

Unikernel 直接在 Xen hypervisor 上运行,而 docker Image(或通用 LXC)在正常的 Linux 发行版上运行,该发行版在裸机上运行。

现在我有 运行 Linux 的 "choice" 和多个最小容器,或者有多个小型 Unikernel 的 Xen 机器。

但这两种解决方案的优缺点是什么?一个比另一个更安全吗?它们之间是否存在显着的性能差异?

来自 http://wiki.xenproject.org/wiki/Unikernels

What do Unikernels Provide?

Unikernels normally generate a singular runtime environment meant to enable single applications built solely with that environment. Generally, this environment lacks the ability to spawn subprocesses, execute shell commands, create multiple threads, or fork processes. Instead, they provide a pure incarnation of the language runtime targetted, be it OCaml, Haskell, Java, Erlang, or some other environment.

Unikernels Versus Linux Containers

Much has been made recently of the advantages of Linux Container solutions over traditional VMs. It is said by container advocates that their lightweight memory footprint, quick boot time, and ease of packaging makes containers the future of virtualization. While these aspects of containers are certainly notable, they do not spell the end of the world of the hypervisor. In fact, Unikernels may reduce the long-term usefulness of containers.

Unikernels facilitate the very same desirable attributes described by the container proponents, with the addition of an absolutely splendid security story which few other solutions can match.

因此,如果您只需要 运行 Haskell 应用程序,Unikernel 可能适合您,并且它们的开销应该比 docker 更少(并且 docker 开销非常大反正很小),但是如果你的应用程序需要一些准备环境,需要与非 Unikernels 软件通信 docker 是更好的选择。我想现在说 Unikernel 是否有用或广泛使用还为时过早,只有时间会证明一切。

Unikernals 非常适合无状态的东西。当您开始需要磁盘访问时,最好使用 Docker。

这就是为什么所有 "killer" unikernals 应用程序都是静态配置的内核,例如静态网页或软件定义的网络堆栈。

有很多很好的解释,这里是一个简单的解释:

Unikernel 是 VM,但专门针对特定应用程序进行了优化。