Docker如何绕过需要一个操作系统?

简而言之,Docker镜像/容器如何在另一台没有OS的机器上工作?

对于虚拟机来说,如果你有一个OS A的机器A和一个OS B的机器B,而你想运行源自机器B的机器A的代码,那么安装在机器B上的VM将运行OS A,所以它会使用机器A的代码

但是对于Docker,机器A和机器B都必须安装OS A吗? 还是机器A仍然有OS A,机器B什么都没有,Docker镜像/容器在机器B上运行,并创build类似于OS A的东西,以便它在机器B上工作?

Docker仍然需要运行一个内核,因为图像不提供自己的内核,也不是完整的操作系统。

当容器启动时,图像层被连接在一起,以提供一个应用程序需要运行的一切。 Docker守护程序configuration各种名称空间(进程,挂载,networking,用户,IPC等)以将容器与同一机器上的其他进程隔离。 这就是提供独立虚拟机的外观和感觉,即使它只是机器上的另一个进程。

在一天结束时,一个容器就是机器上运行的另一个进程。 这只是带来了整个环境。

我最近写了一篇关于这个的博客文章 ,在这篇文章中我做了一个新的形象,可能有助于可视化它的工作方式。 我们在左边有传统的VM堆栈,右边是“容器化”版本。 同样,它们只是共享相同内核的进程,而是使用内核命名空间进行隔离。

容器vs虚拟机

Docker镜像/容器将运行在内核兼容的任何机器上:容器只会对内核进行系统调用。

如果机器B(例如Windows PC)没有Linux操作系统,则需要虚拟机才能运行传统的Linux容器。

也可以看看:

  • “ Docker中的共享内核是什么意思? ”
  • “ Docker容器隔离,是否关心底层Linux操作系统?