【问题标题】:How does Docker bypass needing an OS?Docker 如何绕过对操作系统的需求?
【发布时间】:2017-05-12 04:17:25
【问题描述】:

简单来说,Docker 镜像/容器如何在另一台没有操作系统的机器上工作?

似乎与虚拟机一样,如果您的机器 A 带有操作系统 A,机器 B 带有操作系统 B,并且您希望在机器 B 上运行源自机器 A 的代码,则安装在机器 B 上的虚拟机将运行操作系统 A因此它将与机器 A 中的代码一起使用。

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

【问题讨论】:

    标签: docker deployment virtual-machine


    【解决方案1】:

    Docker 仍然需要内核才能运行,因为映像不提供自己的内核并且不是完整的操作系统。

    当容器启动时,图像的各个层被连接在一起,以提供应用运行所需的一切。 Docker 守护进程配置各种命名空间(进程、挂载、网络、用户、IPC 等)以将容器与同一台机器上的其他进程隔离开来。这就是提供作为单独 VM 的外观和感觉的原因,即使它只是机器上的另一个进程。

    归根结底,容器只是机器上运行的另一个进程。它只是带来了整个环境的一个。

    我最近为此写了一封blog post,其中我制作了一张新图片,可能有助于可视化它的工作原理。左侧是传统的 VM 堆栈,右侧是“容器化”版本。同样,它们只是共享同一个内核的进程,但使用内核命名空间隔离。

    【讨论】:

      【解决方案2】:

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

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

      另见:

      【讨论】:

      • docker 引擎在机器 B 和机器 A 上做了什么?
      • @stackjlei 与机器 A 上的相同:它运行容器,通过将必要的资源与操作系统隔离以将它们专用于所述容器。
      • 所以需要在两台机器上都安装 docker,通常机器 A 将用于创建镜像,然后将其推送到 docker hub,然后机器 b 将用于拉取镜像然后运行它作为一个容器?
      • @stackjlei 是的,或者你可以将 Dockerfile(一个小文本文件)从 A 复制到 B,然后 docker build 机器 B 上的 Dockerfile:你会得到相同的图像。
      猜你喜欢
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      相关资源
      最近更新 更多