如何在AWS Windows Server环境中运行Docker?

19

我尝试过的事情:

在Windows Server 2012 R2上使用工具箱。禁用Hyper-V以允许使用Virtualbox。由于它位于物理BIOS上,我无法启用虚拟化。

在带有容器EC2的Windows Server 2016上安装了Docker EE。安装正确且守护进程正在运行。但是,除了hello-world:nanoserver之外,我无法拉取任何图像。所以我找到了windowsservercore和nanoserver,但仍无法使用,因为它们已经过时了。从Docker.com上的frizzm人的回购不起作用。

再次使用全新的Windows Server 2016实例。我禁用了Hyper-V并安装了ToolBox。但没能成功。

如何在AWS的Windows Server环境中运行Docker?

所有视频/教程看起来都很简单,但我确实无法使它工作。我很失落。


2
你为什么要使用Windows? - Matt Schuchard
2
因为我自己不是Linux程序员,我们所有的环境、UI测试(selenium)和程序员都在Windows(VS)环境中工作。我曾考虑使用AWS Linux AMI...它内置了Docker。但我不知道我们所有的.NET应用程序、服务和测试库是否能在Linux中正常运行。 - J-Roel
Docker镜像是在Windows上运行的吗? - Matt Schuchard
Windows Server 2016支持Windows Docker镜像。这是运行Windows应用程序的Windows Docker。Docker不再仅限于Linux。https://www.docker.com/docker-windows-server - Samuel Neff
@J-Roel 很不可能所有东西都能在 Linux 上无需修改地运行。虽然可以编写 .NET 跨平台应用程序,但是在 Windows 上为 Windows 制作的应用程序很难原封不动地在 Linux 上工作。 - Samuel Neff
我在 Docker 文档中找到了一篇博客教程,这对我很有帮助。但是我还不够熟练,无法编写自己的容器。我的最终目标是利用在 hub.docker.com 上找到的 selenium/hub 和 selenium/grid 镜像。我仍然不明白为什么我不能安装 Docker Toolbox,以便跟随其他教程。为什么工具箱不能在 Windows Server 上运行? - J-Roel
4个回答

22

在 Windows Server 上使用 Docker,您实际上不需要安装 Docker for Windows(之前称为 Docker 工具箱)。

首先,重要的是要了解 Windows Server 2016 平台上有两种不同类型的容器:Windows 容器和 Hyper-V 容器。

  • Windows 容器 - 运行在 Windows Server 内核之上,这里不使用虚拟机
  • Hyper-V 容器 - 虚拟机容器,每个容器都有自己的内核

还有第三个选项,即在 Hyper-V 之上运行的 Linux 容器 on Windows (LCOW),但我们不会涉及它,因为您似乎特别询问 Windows 容器。

以下是您可以查看的几个选项:

在 AWS 上的裸机实例

如果您绝对需要在 AWS 上运行 Windows Hyper-V 容器,或者想要使用 Docker for Windows 运行 Linux 容器,则可以提供 i3.metal EC2 实例类型,这是一种裸机实例。您可以将 Windows Server 2016 部署到 i3.metal 实例类型上,安装 Hyper-V 和安装 Docker for Windows。这将使您能够运行 Linux 容器(在 Hyper-V Linux 客户机下)、Hyper-V 容器和 Windows 容器。

ECS-优化的AMI

亚马逊提供了一个Amazon Machine Image(AMI),您可以从中部署EC2实例,其中包含针对Amazon Elastic Container Service(ECS)的优化。 ECS是一种基于云的群集服务,使您能够在运行于EC2的一组工作节点上部署基于容器的应用程序。

通常,您将同时使用ECS和ECS-优化的AMI来构建生产规模的群集,以将应用程序部署到其中。

带有容器的Windows Server 2016 AMI

还有一个名为“ Windows Server 2016 with Containers ”的AMI可用,它与ECS-优化的AMI不同,但包括支持在Windows Server 2016上运行Docker容器的功能。您只需使用此AMI部署新的EC2实例,即可登录并开始发出Docker命令以启动Windows容器。如果您是初次接触Windows容器,则此选项最可能是最简单的选项。


还有第三个选项,它在Hyper-V之上运行,称为Windows上的Linux容器(LCOW),但我们不会深入探讨它,因为您似乎特别询问Windows容器。这第三个选项是什么?我尝试创建了带有容器的Windows Server 1709 AMI,但无法启动LCOW。 - tris
4
Windows Server 2016 with Containers AMI 自带一个非常过时的 docker 版本。一旦安装了最新版本,docker daemon 就会因为没有启用 Hyper-V 而拒绝启动。有没有人有解决方法? - Ruskin
1
我尝试了Windows Server 2016 with Containers AMI。但是无法拉取像php和postgres这样的镜像。更多详情请参见https://dev59.com/ALHma4cB1Zd3GeqPIkPt。 - Ntk
2
@Ruskin,Windows Server 2019带有容器的AMI,它具有Docker版本17。 - Ntk
感谢您提供如此精美的答案,非常非常有帮助。谢谢。 - Oly Dungey
除非您使用“裸金属”实例,否则无法在Windows EC2上运行Linux容器。这是绝对的事实。在Windows上运行Linux容器需要Hyper-V,而Hyper-V又需要启用嵌套虚拟化,只有当您可以访问主机机器的处理器时才能这样做,而在常规的云EC2实例中您无法这样做。简而言之,请尽量避免使用Windows Server。总之,它没有任何好处,但缺点却是无穷无尽的。 - enanone

14

EC2实例不支持嵌套虚拟化(EC2实例本身就是虚拟机)。Docker for Windows使用Hyper-V技术,而Docker Toolbox使用Virtualbox技术,所以这两个方案都不可行。

即使您能在Windows EC2实例上运行它们,由于Docker for Windows通过Samba将文件挂载到Docker虚拟机中,因此性能也不会很好。

如果您想运行Linux容器,最好在Linux上运行它们。安装非常快速,并且您可以继续使用熟悉的Docker命令。


3
没有理由因为回答无法解决提问者的问题就对其进行踩票。有时候回答只能是“不可能”,比如这种情况。提问者没有具体说明他们是否正在尝试在AWS上的Windows中运行Windows或Linux容器,而这会在AWS上使用的技术和Windows的限制方面产生很大的差异。如果问题是如何在AWS上运行Windows中Docker桌面上的Linux容器,则正确的答案是“不可能”(正如本回答所解释的)。不要仅仅因为回答是坏消息就对某人进行踩票。 - makegofast
1
无需解释其含义。 - learner
不确定为什么这不是正确的答案,但我肯定在Windows Server EC2实例上运行了已安装的docker。在这种情况下,这不是正确或有效的答案。 - Ari

0

在Windows系统上运行Docker是可以实现的。请执行以下命令进行设置:

docker-machine create --driver amazonec2 aws01

这个命令的作用是创建一个新的EC2 Linux实例,并将Docker连接到该Linux实例。当在Windows实例上运行Docker命令时,实际上是将Docker命令发送到Linux实例上执行,并将结果返回到Windows EC2实例。
以下是Docker的文档。希望这可以帮助你。 https://docs.docker.com/machine/drivers/aws/#aws-credential-file

0

我知道这有点违背了你的问题;但是你也可以考虑在新的 ec2 Mac OS 实例上运行它,这些实例是裸机的。对我来说很有效。


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