0

我已经阅读了很多关于 Docker 容器和 Unikernels 以及如何使用我自己的应用程序运行轻量级环境的内容。

我知道 Linux 容器和 Unikernel 是不同的东西,因为第一个是内核功能的实现(例如命名空间、cgroup 等)与主机的操作系统共享资源,而后者是围绕应用程序构建的独立的专用库操作系统。

但后来我在 Dockerhub 中偶然发现了 Alpine linux 派生的图像。它们非常轻巧且非常专业。但是它们是否围绕相同的 LXC/runc 功能运行?

是否可以使用 Docker 在管理程序实现下运行 unikernel?

Alpine 图像与其他图像有什么区别?

4

2 回答 2

1

我对 unikernels 不是很熟悉,但我可以尝试回答您的最后一个问题:

大多数 Docker 镜像都是基于 Ubuntu 的,主要区别在于镜像的大小,而 Ubuntu 镜像有 183MB,而 Alpine 只有 4.5MB。

因此,Alpine 的攻击面较低,专为安全性而设计:http ://www.alpinelinux.org/about/

Alpine Linux 的设计考虑了安全性

Alpine Linux 映像运行在我认为相同的 LXC/runc 功能上。

于 2016-06-25T20:01:15.563 回答
1

Alpine 不是单内核。这是一个 linux 发行版,我不同意它的设计考虑了安全性。

它有多个问题(包括没有root密码):

https://blog.qualys.com/technology/2019/06/11/alpine-docker-image-vulnerability-cve-2019-5021-how-to-detect-and-fix

Unikernel 的特点是它们在设计上是单一进程。这意味着您实际上不能 fork/exec 一个新程序。Alpine 是 linux 不符合该规则。

此外 - Docker 不是管理程序。它可以使用 osx 上的 HVF 或 linux 上的 kvm 之类的东西,但在大多数情况下它不会。为什么?因为大多数被推送到生产环境的 docker 容器最终都存在于公共云中的 linux 虚拟机上。在现有虚拟机上运行另一个虚拟机会产生严重的性能税,因此很少有人会出于选择而这样做。

另一方面,Unikernels 可以部署为自己的 AMI,无需底层 linux。这也将它们与 Alpine 等小型 Linux 发行版区分开来。

还有更多差异(例如缺少用户或缺少 shell 等),但总的来说,Alpine 不是 unikernel,也没有 unikernel 的任何优势。

于 2020-03-04T18:23:00.687 回答