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

Posted

技术标签:

【中文标题】如何在 AWS Windows Server 环境中运行 Docker?【英文标题】:How can I run Docker in a AWS Windows Server environment? 【发布时间】:2018-02-25 03:43:12 【问题描述】:

我尝试过的事情:

Windows Server 2012 R2 上的工具箱。禁用 Hyper-V 以允许 virtualbox。我无法启用虚拟化,因为它在物理 Bios 上。

在带有容器 EC2 的 Windows Server 2016 上安装了 Docker EE。安装正确。守护进程正在运行。但是,我无法在 hello-world:nanoserver 旁边拉出单个图像。所以我搜索了 windowsservercore 和 nanoserver,仍然无法正常工作,因为它们已经过时了。来自 Docker.com 的 frizzm 人员的 repo 在您尝试拉取时不起作用。

使用全新的 Windows Server 2016 实例重新启动。我禁用了 Hyper-V 并安装了 ToolBox。没用。

如何在 AWS 的 windows 服务器环境中运行 Docker?

所有的 vids/tuts 看起来都很简单,但我肯定无法让它发挥作用。我输了。

【问题讨论】:

你为什么使用 Windows? 因为我自己不是 Linux 程序员,所以我们所有的环境、UI 测试(selenium)和程序员都在 windows(VS)环境中工作。我曾考虑过使用 AWS Linux AMI……它内置了 docker。但我不明白我们所有的 .NET 应用程序、服务和测试库在 Linux 中的功能是否相同 那么 Docker 镜像运行的是 Windows 吗? @MattSchuchard Windows Server 2016 支持 Windows Docker 映像。它是运行 Windows 应用程序的 Windows Docker。 Docker 不再只是 Linux。 docker.com/docker-windows-server @J-Roel 如果不进行修改,一切都不太可能在 Linux 上运行。可以编写 .NET 跨平台应用程序,但在 Windows 上为 Windows 开发的应用程序不太可能像在 Linux 上一样工作。 【参考方案1】:

您实际上并不需要安装 Docker for Windows(以前称为 Docker Toolbox)以便在 Windows Server 上使用 Docker。

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

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

还有第三个选项在 Hyper-V 之上运行,称为 Windows 上的 Linux 容器 (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 提供了一个 Amazon 系统映像 (AMI),您可以从中部署 EC2 实例,其中包含针对 Amazon Elastic Container Service (ECS) 的优化。 ECS 是一种基于云的集群服务,使您能够跨 EC2 中运行的一系列工作节点部署基于容器的应用程序。

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

带有容器 AMI 的 Windows Server 2016

还有一个“Windows Server 2016 with Containers”可用 AMI,它与 ECS 优化的 AMI 不同,但确实支持在 Windows Server 2016 上运行 Docker 容器。所有您要做的就是使用这个 AMI 部署一个新的 EC2 实例,然后您可以登录到它并开始发出 Docker 命令来启动 Windows 容器。 如果您是 Windows 容器的新手,那么此选项很可能是最简单的选择。

【讨论】:

>还有第三个选项运行在 Hyper-V 之上,称为 Windows 上的 Linux 容器 (LCOW),但我们不会深入讨论,因为您似乎是在专门询问 Windows容器。这第三个选项是什么?我尝试使用 Containers AMI 创建 Windows Server 1709,但无法使用它启动 LCOW。 Windows Server 2016 with Containers AMI 带有一个非常过时的 docker 版本。一旦您安装了最新版本,docker daemon 就会拒绝启动,因为它没有启用 hyper-v。有没有人解决这个问题? 我尝试了带有 Containers AMI 的 Windows Server 2016。但无法拉取 php 和 postgres 之类的图像。更多细节在这里***.com/questions/54286373/… @Ruskin 有适用于 windows server 2019 的 ami,其容器具有 docker 版本 17 感谢您精心制作的答案,非常非常有帮助。谢谢。【参考方案2】:

EC2 实例不允许嵌套虚拟化(EC2 实例本身就是虚拟机)。 Docker for Windows 在后台使用 Hyper-V,而 Docker Toolbox 在后台使用 Virtualbox,因此这两种解决方案都不可行。

即使您能够在 Windows EC2 实例上运行它们,性能也不会那么好,因为 Docker for Windows 通过 Samba 将文件挂载到 Docker VM 中,速度不是很快。

如果您想运行 Linux 容器,您可能应该在 Linux 上运行它们。它的设置速度非常快,而且您在 Docker for Windows 中使用的所有 Docker 命令都应该仍然有效。

【讨论】:

没有理由仅仅因为它不能解决 OP 的问题就否决这个答案。有时答案是“不可能”,例如在这种情况下。 OP 没有具体说明他们是否尝试在 AWS 中的 Windows 上的 Docker Desktop 中运行 Windows 或 Linux 容器,这在 AWS 中产生了很大差异,具体取决于 Windows 中使用的技术和限制。如果问题是如何在 AWS 的 Windows 上的 Docker Desktop 中运行 Linux 容器,那么正确的答案是“不可能”(如本答案所述)。不要仅仅因为答案是坏消息就对某人投反对票。 无需投反对票,只需投赞成票更好的线索。 不确定这何时不是正确答案,但我肯定在 Windows Server EC2 实例上运行 docker(我已安装)。在这种情况下,它不是正确或有效的答案【参考方案3】:

可以在 windows 上运行 docker。运行以下命令进行设置。

docker-machine create --driver amazonec2 aws01

此命令的作用是创建一个新的 EC2 linux 实例,并将 docker 连接到该 linux 实例。当 docker 命令在您的 windows 实例上运行时,docker 命令实际上会发送到 linux 实例,执行,并将结果返回到 windows EC2 实例。

这是 Docker 关于它的文档。我希望这有帮助。 https://docs.docker.com/machine/drivers/aws/#aws-credential-file

【讨论】:

【参考方案4】:

我知道这与您的问题有些矛盾;但您也可以考虑在裸机的新 ec2 Mac OS 实例之一上运行它。为我工作。

【讨论】:

以上是关于如何在 AWS Windows Server 环境中运行 Docker?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AWS *** 从 EC2 实例 ping 到本地 Windows Server?

如何将数据从本地 SQL Server 推送到 AWS 上的 Tableau Server

在windows 2000 server中如何配置技术.net的IIS运行环境?

如何在 AWS Elastic Beanstalk 环境中将 Tomcat 的 URIencoding 设置为 UTF8?

Windows环境下vscode Live Server插件如何开启https

windows 12 server 怎么 配置 php 环境