在Windows上使用Docker需要启用Hyper-V吗?

5

Docker需要在Windows中启用Hyper-V吗?如果是,为什么?

在这种情况下Hyper-V的作用是什么?

我正在使用Windows 10家庭版。有没有安装Docker的替代方案来代替Hyper-V?


可能是Is it possible to use Docker without Windows 10 pro?的重复问题。 - Hong Ooi
1个回答

9
如果您使用的是Windows10专业版且您的BIOS支持硬件虚拟化,建议您启用Hyper-V。
在Windows10中运行Linux容器时,实际上仍需要一个Linux系统作为Docker主机,因为Linux容器无法与Windows共享内核。
如果启用Hyper-V,则Docker-Windows将自动在Hyper-V中设置一个MobyLinuxVm作为虚拟机,充当Docker的主机机器。与传统解决方案相比,我指安装VirtualBox中的Linux。Hyper-V具有更好的性能,因为它不依赖于Windows操作系统,它类似于基于硬件的设置,就像VMware-ESX一样。
最后,如果您使用的是Windows10家庭版,则必须安装VirtualBox作为Docker的主机机器,并使用Docker Toolbox,有关旧版桌面解决方案的详细信息,请参阅https://docs.docker.com/toolbox/overview/
更新一些您可能想知道的附加点:
a)Linux容器:
Docker容器必须与主机共享内核,在Windows上没有Linux内核,因此对于所有情况,您都必须有一个带有Linux作为Docker主机的虚拟机,如果没有Hyper-V支持,则为Hyper-V或VirtualBox。
b)Windows容器:
在理论上,Windows容器可以共享Windows内核,因此不需要虚拟机。但是与Linux相比,微软支持容器的时间较晚,因此对于不同的主机,使用不同的解决方案,请参阅下一章节来自Microsoft网站
Windows容器包括两种不同的容器类型或运行时。
Windows Server容器 - 通过进程和命名空间隔离技术提供应用程序隔离。 Windows Server容器与容器主机和在主机上运行的所有容器共享内核。这些容器不提供敌对安全边界,并且不应用于隔离不受信任的代码。由于共享内核空间,这些容器需要相同的内核版本和配置。
Hyper-V隔离 - 扩展了Windows Server容器提供的隔离,通过在高度优化的虚拟机中运行每个容器来实现。在此配置中,容器主机的内核不与同一主机上的其他容器共享。这些容器专为敌对多租户托管而设计,具有虚拟机的相同安全保证。由于这些容器不与主机或主机上的其他容器共享内核,因此它们可以运行具有不同版本和配置的内核(在支持的版本中)-例如,Windows 10上的所有Windows容器都使用Hyper-V隔离来利用Windows Server内核版本和配置。

谢谢你的回答。所以,当我们在Docker中使用Windows容器时,它使用Windows操作系统内核;而对于Linux容器,则使用作为Hyper-V一部分创建的Linux操作系统? - catchkarthik
针对Linux容器是正确的,但对于Windows容器来说,情况有点复杂。请查看我的更新答案,其中引用了一些来自Microsoft的内容。 - atline
我有一个疑问:如果我尝试拉取不同于我们本地构建(如Windows Server:1709)的构建的Docker镜像(例如:Windows Server Core:1809),这样的镜像将在具有不同内核的Hyperv中运行。我是对的吗?那么这些镜像的内核将在哪里创建? - JibinNajeeb
当您在Windows服务器上使用--isolation=hyperv切换到hpyerv模式时,Hyper-V管理器中会自动设置虚拟机(这是在Windows Hyper-V上的Linux容器的事情,我从未尝试过Windows容器,但您可以在Windows服务器上验证它),内核将存在于自动创建的hyperv虚拟机中。 - atline

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接