据我所知,CoreOS 是一个基本的 Linux 发行版,它基本上可以方便运行包含您需要的任何应用程序或服务的 Docker 容器。
来自CoreOS 文档我认为您的意图是将大多数服务分离到单独的 Docker 容器中,以便您可以水平扩展,从而允许 fleet 在多个节点上管理容器。
我有点困惑的是,当您想要运行需要特定 Linux 用户空间的服务时(例如在 Ubuntu 或 Fendora 上运行的 apache 等)。例如,我有一个容器,上面运行着 Ubunutu 和 apache,我想让另一个容器运行 Samba 实例(也在 Ubunutu 上),我是否实际上运行了 2 个 Ubuntu 副本,并承担了运行这些操作系统的所有开销?
我想我很可能误解了容器的工作原理——如果我在容器中运行 Ubuntu,那么我大概会共享 CoreOS 内核,而只有“用户空间”操作系统的一部分正在“运行”?
那么可能的问题可能是,运行内核是运行操作系统的昂贵部分吗?那么当您运行虚拟机时,您不仅要模拟硬件,还要运行多个内核,从而损失大量资源?
答案1
是的,您运行的是多个用户空间,但只有一个内核,这意味着内核可以全面了解所有内存管理,并且可以根据 CPU 份额等最有效地在正在运行的容器之间分配内存。对于内核来说,容器只是需要访问硬件的另一个进程。每个容器进程恰好使用特定的用户空间,归根结底,这只是磁盘上一堆以名称为空间的文件。