如果Docker在Windows上本机运行,那为什么它需要hyper-v

Tig*_*ear 29 docker docker-machine docker-for-windows

如果Docker社区在Windows上本机运行,那为什么它需要Hyper-v?IE,本地暗示Docker-Engine可以在Windows上运行指令吗?它看起来像它仍然启动一个Linux VM并与之一起运行.

对我来说,似乎docker-toolbox使用运行linux的oracle hyper-visor,而Docker社区使用运行linux的Hyper-V.我忽视了另一个重要的区别吗?

它是否正确?我理解"本地"这个词是错误的,是码头工人误用了这个词,还是我还缺少其他一些方面?

我问的原因是因为我注意到你没有将Docker-machine与社区版一起使用,我想知道为什么会这样.docker-machine是在windows上运行的东西,而Docker Engine却没有?我认为docker这个词过载,在这种情况下可能导致混乱:)

提前致谢!

BMi*_*tch 18

Docker对Windows的支持有几种变体:

  1. Docker Toolbox包含Docker Machine,它将在VirtualBox中旋转boot2docker镜像.这些是在VM内部运行Linux内核的Linux容器.这最初是Windows用户的唯一选择.

  2. Docker for Windows使用Hyper-V运行基于LinuxKit的Moby VM来运行Linux映像.LinuxKit提供了一个基于容器的Linux操作系统,并且有一些集成使它看起来不像最终用户的VM,例如你可以使用127.0.0.1而不是VirutalBox VM的IP.如果您有可用的Hyper-V并且想要在Windows上运行Linux容器,则这是首选选项.

  3. Windows Server Containers在同一主机操作系统上运行Windows二进制文件,类似于Linux操作系统上的Linux容器不需要VM.

  4. Hyper-V容器在单独的VM内运行Windows二进制文件以进行额外隔离.

您可以在Microsoft的文档中阅读有关后两个选项的更多信息.

需要注意的重要一点是,当您在支持的服务器(如2016)上安装Docker for Windows时,您可以在两者之间切换选项2,3和4.对于Linux和Windows容器,设置中有一个影响所有正在运行的容器和命令的开关.在Windows Server Containers和Hyper-V容器之间,命令行--isolation上有一个选项docker run.因此,即使您只需要选项3,我相信您需要支持Hyper-V才能覆盖2和4.

  • “有些集成使最终用户看起来不像VM,例如,您可以使用127.0.0.1代替VirutalBox VM的IP”-如果我理解正确,这是主要区别。对于我作为最终用户而言,如果我安装Windows的“本地” Docker(Hyper-V)而不是Docker Toolbox(VBox),那么便利性还有什么不同?与docker-machine不同,`docker run`是否可以通过Hyper-V立即执行?挂载的共享文件夹是真的共享的吗? (2认同)

ap-*_*osd 8

Docker 在 Linux 上发展而来。许多混乱是由于 Docker 试图支持 Windows 上的容器化而产生的。

\n

如果容器可以直接在主机操作系统上运行,则将其视为 \xe2\x80\x9cnative\xe2\x80\x9d。

\n

Linux 容器:在隔离的 Linux 环境中运行的 Linux 应用程序。
\n这个相同的容器可以使用虚拟化来模拟 Linux 环境在 Windows 上运行,但该容器仍然在 Linux 上运行。这种虚拟化可以

\n
    \n
  • VirtualBox(Docker 工具箱)
  • \n
  • Hyper-V 后端(Docker 桌面)
  • \n
  • WSL2 后端(Docker 桌面)
  • \n
\n

Windows(服务器)容器:在隔离的 Windows 环境中运行的 Windows 应用程序。

\n
    \n
  • 进程隔离 - 这是容器的 \xe2\x80\x9cttraditional\xe2\x80\x9d 隔离模式。与Linux容器在Linux上的运行方式大致相同
  • \n
  • Hyper-V 隔离 - 此隔离模式提供增强的安全性以及主机和容器版本之间更广泛的兼容性。
  • \n
\n

正如您所看到的,Hyper-V 甚至可以用来运行本机 Windows 容器,这通常会造成混乱。

\n

此外,docker-machine是被取代的产品。

\n
\n

在 Docker v1.12 之前,Machine 是在 Mac 或 Windows 上运行 Docker 的唯一方法。从 beta 程序和 Docker v1.12 开始,适用于 Mac 的 Docker Desktop 和适用于 Windows 的 Docker Desktop 可作为本机应用程序使用,并且是较新台式机和笔记本电脑上此用例的更好选择。

\n
\n

请参阅Linux 和 Windows 中的 Docker 容器,了解许多术语、技术和参考的高级概述。

\n


小智 7

Windows 上对 Docker 的支持不是原生的,Docker 最初是为在 Linux 上运行而编写的。所以在 Windows 上运行 Docker CE 的要求是:

  1. 必须启用虚拟化,因为 docker-ce 在 Hyper-V 上创建了一个 VM。由于所有管理程序都需要启用硬件虚拟化,因此 Hyper-V 在这件事上也不例外。如果需要,Docker for Windows 安装程序将为您启用 Hyper-V,然后重新启动您的机器。

  2. 对于不支持硬件虚拟化的旧 Windows 系统,建议使用 Docker Toolbox,它使用 Oracle Virtualbox 来启动将托管 docker 容器而不是 Hyper-V 的 VM。

  • 这对于 Windows 上的 Linux 容器是正确的,但我相信 OP 正在询问 Windows 容器(运行 Windows 二进制文件)。 (2认同)

dk.*_*dk. 7

除了“Hyper-v 隔离”之外,Windows 还支持“进程隔离”。

Windows 上的进程隔离容器在没有额外虚拟化层的情况下运行(类似于您在 linux 上使用 docker 时可能使用的);我相信这就是 OP 在提到“本机”容器时所寻找的。

进程隔离支持仍然相当新,但最新版本的 Windows Server 2019 和 Windows 10 确实可以运行 Windows 容器,而无需 Hyper-v 虚拟主机的额外开销。需要注意的一件事是,您的 Windows 容器基础映像内核版本必须与主机上的内核版本相匹配。因此,您可能无法简单地使用在 hyper-v 上运行的完全相同的容器。

这是一个Windows 容器版本兼容性表,其中突出显示了哪些主机操作系统支持processhyperv隔离。

尽管此^页面并未指明,但Windows 10 Update 1809 是第一个支持 Docker 进程隔离的更新,Docker Engine Release Notes 中所述