在没有主机操作系统的情况下运行docker?

在没有主机操作系统的情况下运行docker?,docker,Docker,我是否可能在没有任何主机操作系统的情况下运行docker。我的意思是以本地方式运行它。如果可能的话,我相信这将是一个性能提升 假设我有一个运行在linux内核上的工具。我创建了一个具有一些额外依赖项的docker容器。现在,我与其他拥有linux来运行该容器的人共享该容器 但我想在没有主机操作系统的情况下运行该容器。因为它将是带有容器的双层操作系统。Docker本身不是VM,所以没有双层操作系统。Docker是一种运行应用程序的工具,其设置将应用程序与运行在同一操作系统内核上的其他应用程序隔离开

我是否可能在没有任何主机操作系统的情况下运行docker。我的意思是以本地方式运行它。如果可能的话,我相信这将是一个性能提升

假设我有一个运行在linux内核上的工具。我创建了一个具有一些额外依赖项的docker容器。现在,我与其他拥有linux来运行该容器的人共享该容器


但我想在没有主机操作系统的情况下运行该容器。因为它将是带有容器的双层操作系统。

Docker本身不是VM,所以没有双层操作系统。Docker是一种运行应用程序的工具,其设置将应用程序与运行在同一操作系统内核上的其他应用程序隔离开来。Docker确实包含一个VM,其中Docker for Windows和Docker for Mac运行Linux内核,因此您可以运行Linux容器。可以选择在Server 2016上运行本机Windows容器,但如果您希望最低限度地提高效率,我建议您到别处看看

与您所寻找的最接近的是:

  • Unikernels:这些应用程序被编译到内核中,其他所有内容都被删除,设计用于在VM内部运行,以执行非常特殊的任务,通常与安全相关。这些仍然处于开发阶段的早期,但Docker确实在项目中使用了他们的一些技术

  • LinuxKit(Moby项目的一部分):Docker就是这样为Docker for Windows和Docker for Mac创建虚拟机的。它是一个基于容器的Linux操作系统,您可以仅使用要运行的容器进行自定义编译。这方面的大部分重点仍然是为虚拟机设计的,但裸机是一种选择

  • Scratch base image:如果您静态编译应用程序以删除所有库依赖项,那么您可以拥有一个没有任何shell或其他操作系统工具的容器。这通常出现在作为Docker容器运送的Go二进制文件中,用于执行单个任务,攻击面非常小。作为Docker容器,它仍然需要底层Linux操作系统来运行二进制文件


Docker已经共享了主机使用的同一个内核,除非您使用的是Docker机器或其他等效设备。你不能从两个内核变成一个,因为它已经是一个内核了;首先,你问我们如何摆脱的开销并不存在。然后Docker机器启动一个(正好一个)Linux虚拟机,并将该虚拟机的内核用于所有容器,不管你有多少个容器。仍然只有一个Linux内核,所以没有进一步优化的空间。如果您希望只有一个内核,那么您的主机必须是Linux。这仍然不同于这个问题所要求的“没有(任何)主机操作系统”。你需要一个操作系统。最好是有一个精简的操作系统。在这种情况下,可以探索的几个选项是alpine+docker、rancher操作系统和core操作系统。您可以在Dockerfile中使用基本映像,具体取决于您需要运行什么。这适用于一些golang应用程序。例如: