我可以在虚拟机中 运行 Docker 吗?

Can I run Docker in a Virtual Machine?

我尝试在虚拟机上 运行 Docker。

Host : MacBook 
VM : Parallels Windows 7

并发生错误:

可能吗?

您在 Windows VM 中使用 Docker Machine,它实际上将在 Windows VM 中创建一个 Linux VM在你的 Mac 上。您可以这样做,但您需要 enable nested virtualization - 我不确定您是否可以在 Parallels 7 中做到这一点。

相反,您可以 运行 Docker Mac直接在 Mac 上添加 use Parallels to create the Linux VM - 这意味着 Docker 是 运行在 Mac 上的 Linux VM 中,您不需要嵌套虚拟化。

或者最好使用 Docker for Mac 如果您的 OS 支持它,它是最新产品并且主机集成比 Docker Machine 好得多。

如果 VM 是 Linux,您可以毫无问题地执行此操作 - 在 Linux 上,Docker 本质上是 well-worked chroot。因此,Linux docker 不是虚拟化。

在Windows的情况下,就没那么容易了。 Windows Docker 内部使用 Hyper-V 来模拟容器。这意味着你只能运行,如果你可以使用嵌套虚拟化:

  1. 在您的主机上运行有一个Windows VM
  2. 在您的 Windows VM 中,运行 是一个 HyperV
  3. HyperV 由安装在您的虚拟 Windows 上的 docker 管理。

我尝试了 qemu/kvm、virtualbox 和 vmware player。我对它们进行了深入而强大的配置,我已经破解了它们,我尽了一切可能。只有最后一个有效(VMWare)。

有显着的速度成本,但它可能对 Linux 上的开发有用,然后 trial-test Windows 配置上的开发可能有用。

您将需要大量内存。至少16G。 32G更好。一个相对有用的配置是:

  • 物理主机的 32GB 物理 RAM
  • 12GB 虚拟 RAM 用于 Windows 虚拟机 运行 在其上
  • 8GB 虚拟内存 在 Windows VM 中用于 HyperV Linux 主机。

有时会出现一些问题,但只有您的 HyperV 会崩溃,您的虚拟 Win 或您的主机不会。在 Windows 机器上测试 docker 容器是可以的,你在 Linux 上开发的东西。不要以这种方式创建关键任务服务器。 :-)

如果您要使用 Windows 10/11 Pro 或 Enterprise 和 Hyper-V,那么您只需启用 nested virtualization。在您的主机上,只需 运行(您的访客关闭):

> Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

现在您可以正常启动来宾和 运行 Docker 桌面。

工作得很好。 Base OS win 10 pro with VirtualBox Version: 6.1 and vagrant with ubuntu 20.04. Using vagrant box follow docker instructions. With vagrant public network 不需要端口转发所有应用程序都可以访问。

根据 Docker 的 terms,我认为这是不允许的。第 4.1(b)(vii) 节规定您不得“在虚拟机上使用服务”。为澄清起见,“'Service' 是指 Docker 提供的应用程序、软件(包括任何开源软件)、产品和服务,包括任何测试版或试用版。”

如果我没看错,那就意味着在任何 VM 上 运行 Docker 都是非法的。