Docker Container与Unikernel进行比较

我最近部署了一个带有docker的小型Haskell应用程序,使用“scratch-haskell”作为基础图像。

然后我读了Unikernels和HALVM。 我有点困惑。

我的docker集装箱大约6MB。 一个Unikernel(与haskell应用程序相同)将大致相同的大小,我猜。

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

现在我有了使用多个最小容器运行Linux的“select”,或者有多个小型Unikernel的Xen机器。

但这两种解决scheme的优缺点是什么? 比另一个更安全吗? 他们之间有什么重大的性能差异?

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

Unikernels提供了什么?

Unikernels通常会生成一个单一的运行时环境,意味着只能使用该环境构build的单个应用程序。 一般来说,这个环境缺乏产生subprocess,执行shell命令,创build多个线程或fork进程的能力。 相反,它们提供了目标语言运行时的纯粹化身,无论是OCaml,Haskell,Java,Erlang还是其他一些环境。

Unikernels与Linux容器

最近,Linux Container解决scheme相对于传统虚拟机的优势已经取得了很大的进展。 据容器倡导者说,它们轻量级的内存占用,快速的启动时间以及容易的打包使得容器成为虚拟化的未来。 虽然容器的这些方面肯定是值得注意的,但它们并不能说明pipe理程序的世界末日。 事实上,Unikernels可能会降低集装箱的长期使用价值。

Unikernels促进了容器支持者所描述的非常相同的理想属性,增加了其他解决scheme无法比拟的绝对精彩的安全故事。

所以,如果你想运行Haskell应用程序,Unikernels可能适合你,而且它们的开销应该比dockerless(而docker的开销是非常小的),但是如果你的应用程序需要一些准备好的环境,需要与非Unikernels软件进行通信docker是一个更好的select。 我想现在说Unikernels是有用的还是普遍的还不算太早,只有时间才能说明。

Unikernals非常适合那些无国籍的人。 当你开始需要磁盘访问时,最好使用Docker。

这就是为什么所有unikernals的“杀手”应用程序都是静态configuration的内核,如静态网页或软件定义的networking栈。

有很多很好的说明inheritance人简单的一个:

Unikernel是虚拟机,但专门针对特定应用进行了优化。

在这里输入图像说明