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

时间:2018-01-14 16:31:55

标签: docker docker-machine docker-windows

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

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

这是对的吗?我是否理解" native"错误的是,码头工人误用了这个词,还是有其他一些方面我不知道?

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

提前致谢!

7 个答案:

答案 0 :(得分:11)

Windows的Docker支持有几种变体:

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

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

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

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

  5. 您可以在Microsoft's docs中详细了解后两个选项。

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

答案 1 :(得分:2)

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

Windows上的进程隔离容器无需额外的虚拟化层即可运行(类似于Linux上的docker可能使用的虚拟层);我相信这是OP在引用“本机”容器时正在寻找的东西。

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

这里是Windows container version compatibility table,突出显示了哪些主机操作系统支持processhyperv隔离。

即使此^页没有指出, Windows 10 Update 1809是第一个支持Docker进程隔离的更新,如Docker Engine Release Notes中所述。

答案 2 :(得分:1)

Windows Server Containers在Windows 10上需要Hyper-V隔离,以便为开发人员提供将在生产中使用的相同内核版本和配置,有关详细信息,请参阅关于Windows container page

答案 3 :(得分:0)

我的理解是Hyper-V是Windows实现的虚拟机解决方案。

在Windows上本地运行的Docker意味着它不需要安装第三方软件,如virtualbox,vmware fusion或parallels才能运行,而是使用Windows 10附带的Hyper-V软件。

答案 4 :(得分:0)

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。

答案 5 :(得分:0)

我知道我参加晚会很晚,但是最近我的新手头脑也发了同样的问题,所以这里是我的2美分。

简短答案

即使我们说我们永远不会在Windows上启动Linux容器,也不会使用Hyper-V隔离模式,仍然需要Hypervisor进行一件事。我说的是 vNIC Windows container networking向我们展示了它是Windows Server容器不可或缺的一部分。

好答案

据我了解,以下两个关键组件使Windows上的本机容器成为可能:

  1. Host Compute Service and Host Network Service被实现为底层功能之上的抽象层。服务协同工作以创建容器并将端点附加到网络。
  2. Server Silo是一项主要功能,允许“隔离”本机容器。如果我没记错的话,该功能在其他地方也称为“容器用户模式”或“命名空间”。 Windows Containers Internals中提供了很好的概述。

对于Networking,每个容器都有一个连接到Hyper-V虚拟交换机(vSwitch)的虚拟网络适配器(vNIC),所以我猜测这是您仍然需要Hyper的主要原因。 -V的东西。

答案 6 :(得分:0)

Docker在Linux上发展。 Docker试图在Windows上支持容器化时,会引起很多困惑。

如果容器可以直接在主机操作系统上运行,则将其视为“本机”。

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

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

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

  • 进程隔离-这是容器的“传统”隔离模式。它与Linux容器在Linux上的运行方式大致相同
  • Hyper-V隔离-这种隔离模式可增强安全性,并在主机版本和容器版本之间提供更广泛的兼容性。

如您所见,Hyper-V甚至可以用于运行本机Windows容器,这通常会引起混乱。

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

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

有关许多术语,技术和参考的高级概述,请参见Docker Container in Linux and Windows