Answers:
容器化所需的关键要素是网络和其他服务的隔离,但不仅是隔离,还包括虚拟化。FreeBSD Jails,Linux“容器”(或更正确地说是“命名空间”)和Solaris / illumos区域都为这些操作系统系统服务提供了一定程度的“虚拟化”。
通过虚拟化,这意味着这些服务器对于“容器”内部的事物可用(或潜在地可用),但以保护容器外部同一主机上的其他事物为方式。(例如,一个容器可能具有自己的TCP / IP堆栈,其自己的IP地址,ARP缓存等)。
OS(操作系统)虚拟化是我们通常所说的“轻量级”虚拟化的一种方式,在这种虚拟化中,进程认为他们看到了一个虚拟内核,但是都在后台共享相同的真实内核。该内核充当一种虚拟机管理程序,可确保不跨越容器/虚拟化边界。(换句话说,将OS服务虚拟化。)将其与硬件虚拟化进行比较,其中虚拟化的是硬件-例如,设备在软件中进行仿真并呈现给容器中运行的操作系统。这是非常强大的功能,但是会占用大量资源-每个虚拟机必须具有自己的操作系统副本。
最近的macOS通过Hypervisor.framework提供了本机hypervisor支持,该软件允许“ XHyve”(FreeBSD的BHyve的端口)之类的软件(macOS上的docker使用此软件),但缺乏全面虚拟化操作系统服务所需的必要服务。
实际上,可能已经存在很多需要的东西,因为提供沙箱的工作意味着已经存在逻辑点,对于不同的应用程序,系统调用将被截取并以不同的方式处理。但是,这还远未达到完整的过程—实现真正的独立网络,IPC和其他名称空间需要大量工作。
苹果之所以没有这样做的最好原因,可能与苹果多年来没有发布适合在数据中心运行macOS的平台的原因相同-缺乏市场需求,或者苹果领导层认为缺乏市场需求。他们专注于台式机和移动设备的重点只是不需要那么多的虚拟macOS实例。(这很可悲,因为我很想拥有虚拟macOS支持-例如,与Linux容器相比,在Travis CI的VM上运行macOS确实很耗时)。
你会惊奇地发现-集装箱实际上是支持-在OS X(和iOS)沙箱已经进化到使用它们。它们已在10.7中引入,现在实际上已在10.10和iOS 8中成为标准。在后者中,它们的执行更为严格(主要是由于应用程序安全性的原因),以至于应用程序只能看到自己,而以前枚举进程或资源的方法现在返回基于容器的结果-与Linux ipc名称空间类似-但功能更强大。
我想答案是没有人真正想要它。这似乎是可行的。完成这些操作主要是出于一个目的,可以为VPS供应商节省性能。确实没有人希望VPS实例基于OSX。