如果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这个词过载,在这种情况下可能导致混淆:)
提前致谢!
答案 0 :(得分:11)
Windows的Docker支持有几种变体:
Docker Toolbox ,其中包含将在VirtualBox内旋转boot2docker镜像的Docker Machine。这些是在VM内部运行Linux内核的Linux容器。这最初是Windows用户的唯一选择。
Docker for Windows 使用Hyper-V运行基于LinuxKit的Moby VM来运行Linux映像。 LinuxKit提供了一个基于容器的Linux操作系统,并进行了一些集成,使其看起来不像最终用户的虚拟机,例如:您可以使用127.0.0.1而不是VirutalBox VM的IP。如果您有可用的Hyper-V并希望在Windows上运行Linux容器,则这是首选选项。
Windows Server Containers ,它在同一主机操作系统上运行Windows二进制文件,类似于Linux操作系统上的Linux容器不需要VM。
Hyper-V容器,它在单独的VM中运行Windows二进制文件以进行额外隔离。
您可以在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,突出显示了哪些主机操作系统支持process
或hyperv
隔离。
即使此^页没有指出, 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的要求是:
必须启用虚拟化,因为docker-ce在Hyper-V上创建VM。由于所有虚拟机管理程序都需要启用硬件虚拟化,因此Hyper-V在此问题上并不例外。如果需要,Docker for Windows安装程序将为您启用Hyper-V,然后重新启动计算机。
对于不支持硬件虚拟化的旧Windows系统,建议使用Docker Toolbox,它使用Oracle Virtualbox来启动将托管docker容器而不是Hyper-V的VM。
答案 5 :(得分:0)
我知道我参加晚会很晚,但是最近我的新手头脑也发了同样的问题,所以这里是我的2美分。
简短答案
即使我们说我们永远不会在Windows上启动Linux容器,也不会使用Hyper-V隔离模式,仍然需要Hypervisor进行一件事。我说的是 vNIC 。 Windows container networking向我们展示了它是Windows Server容器不可或缺的一部分。
好答案
据我了解,以下两个关键组件使Windows上的本机容器成为可能:
对于Networking,每个容器都有一个连接到Hyper-V虚拟交换机(vSwitch)的虚拟网络适配器(vNIC),所以我猜测这是您仍然需要Hyper的主要原因。 -V的东西。
答案 6 :(得分:0)
Docker在Linux上发展。 Docker试图在Windows上支持容器化时,会引起很多困惑。
如果容器可以直接在主机操作系统上运行,则将其视为“本机”。
Linux容器:在隔离的Linux环境中运行的Linux应用程序。
可以使用虚拟化来模拟Linux环境,在Windows上运行同一容器,但是该容器仍在Linux上运行。这种虚拟化可以是
Windows(服务器)容器:在隔离的Windows环境中运行的Windows应用程序。
如您所见,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。