在生产环境中使用Windows上的Docker

15

我被要求研究Docker。我无法得到明确回答的问题是“你能在Windows上生产环境中运行Docker吗?”。

我一直看到“Docker镜像容器可以在Linux和Windows上原生运行。但是,Windows镜像只能在Windows主机上运行,Linux镜像只能在Linux主机上运行,这意味着主机服务器或VM。”

我不想运行容器化的Windows应用程序(.net)。我们有Spring Boot(java)应用程序,并创建了微服务架构。这些容器化的应用程序不需要在同一容器中运行操作系统。

我们还需要像Kubernetes这样的编排引擎,但不清楚它是否也可以在Windows上生产环境中运行。

我一直在努力争取将部署环境切换到Linux,但目前看来失败了。

6个回答

7
引用文档

欢迎使用 Docker for Windows!

Docker 是一个完整的开发平台,用于创建容器化应用程序, 而 Docker for Windows 是在 Windows 系统上开始使用 Docker 的最佳方式。

请字面理解。它是供开发人员在Windows上开发Docker环境的工具,而不是生产环境。如果要在生产环境中运行它,他们希望使用Linux主机。

去年的这篇博客文章表明,Mac和Windows上的Docker已经“准备好投入生产”-https://blog.docker.com/2016/07/docker-for-mac-and-windows-production-ready/。 - warren
1
@warren:再次引用博客文章上的话:“我们开发 Docker for Mac 和 Windows 的目标很简单——创造最简便的方式在你的开发机器上使用 Docker”。所以,Docker 仍然是一个开发工具,现在已经走出了自己的开发周期并可以被开发人员用于生产。 - Sven
Docker for Windows 使用 Hyper-V 来托管 Docker 主机(一个 Linux 虚拟机)。Windows Server 上的 Hyper-V 绝对可以用于生产环境。那么,如果您可以接受不同文件系统的卷和挂载问题,那么问题在哪里呢? - FizxMike
3
Windows Server 2016 是 Docker Windows 容器应该部署到生产环境的地方。 - Dan
@Dan 我正在使用Win Server 16/19,但性能方面我不太满意。如果您不使用WSL(Linux子系统),镜像大小会达到GB级别,我认为是win镜像本身引起的。我使用WSL。即使我将容器资源使用限制在服务器资源的一半,整个Windows Docker系统的使用仍然太多。我面临的另一个问题是网络延迟,但我不确定它是否与Windows Docker或我使用的镜像有关。 - Davut Gürbüz

5

不清楚OP是否在询问“我可以在Windows上生产环境中运行Docker”(从许可证角度),还是“我应该运行它”(从经验角度)。我有一个答案,应该能解决这两个问题。

值得注意的是,截至我撰写本文时,所有的回答和评论都来自2018年或(像问题一样)2017年。

以下是至少一个来自Docker的2019年帖子,涉及到在生产环境中运行的客户端列表,因此它解决了这两个问题:

https://www.docker.com/blog/5-reasons-to-containerize-production-windows-apps-on-docker-enterprise/

虽然标题提到了Docker Enterprise,但文章中确实提到“数百家企业现在正在生产环境中运行Windows容器节点”,没有包含Enterprise的限定词。
即便如此,那些“不想支付运行Docker Enterprise费用”的人应该注意到,Windows 2016和2019包括免费的Docker Enterprise许可证。(至于Docker最近将企业产品出售给Mirantis引起的动荡,尚无迹象表明它的Windows许可证会发生变化。)
尽管如此,我意识到原帖作者和其他读者可能还需要更多(有文献支持的)关于Windows上Docker部署生产的证据。我会留给其他人详细阐述。只是认为这篇文章不应该空着,没有比2018年7月更近的内容。

1
你的其中一个链接已经失效了。这里是它的存档版本:https://web.archive.org/web/20201022011115/https://www.docker.com/blog/5-reasons-to-containerize-production-windows-apps-on-docker-enterprise/ - TrojanName
谢谢 @TrojanName。我不知道协议:我应该保持原样,让你的评论纠正记录吗?还是应该更改并在此处确认?也许这个评论就足够了,因为这是一个旧问题和旧回答。 - charlie arehart
1
我认为这个评论已经足够了。说实话,Docker周边的东西每周都在变化,所以所有的信息很快就会过时! :-) - TrojanName

2

请查看这篇博客,它引用了“Windows Server 2016是Docker Windows容器生产部署的最佳选择”。


2
首先,我怀疑这个问题在三年后可能已经过时了。我不知道你是否仍在努力解决这个问题,但我很想听听你的经验和你所采取的路线。
这可能是一个有偏见的答案,但我会尽力用我的经验来回答。像你一样,我们也曾经努力说服我们的客户使用Linux服务器,但最终失败了。我们有两台物理机和一小群运行Windows Server 2019的虚拟机——服务器版本为1809(这不是最前沿的版本,但是是最新的稳定版本)。它确实比WS2016更好。然而,它仍然存在一些问题。最大的问题是与Docker Swarm相关的。覆盖网络和路由网格并没有正常工作。因此,我们不得不退回到使用Docker-compose和手动服务发现的容器,这有点违背了Docker的目的。
话虽如此,Swarm网络的问题可能是因为我们使用了虚拟机和Hyper-v交换机。除此之外,我们没有直接访问主机网络,每当我们需要更改网络时就必须跳过一些官僚主义的障碍,当我们想要测试东西时,这变得非常老套。此外,由于我们对网络的信心不足,我们没有Active Directory。我仍然不确定在虚拟环境中DCs是否会与docker兼容。但没有AD还是可以管理的,因为我们没有很多机器。

另一个问题是,由于CPU问题,我们没有嵌套虚拟化(即无法运行moby),而WSL2支持Docker的版本在WS19 LTSC版上不可用。因此,我不得不为我们使用的许多东西编写自己的镜像。比如Jenkins、Redis等等。如果感兴趣,您可以在这里找到dockerfile但显然,保持它们的最新状态和整洁是一项巨大的工作,我没有太多时间去投资。

在性能方面,我们似乎没有问题,但我们没有进行比较分析。

总的来说,我喜欢Docker,它是一个很棒的产品。但在这个项目之后,我想在生产环境中不会再碰Windows上的Docker。实际上,我不知道以后是否会使用Windows机器作为生产环境。虽然在开发中使用它很酷。

0

我强烈建议不要在生产环境中使用Windows的Docker Desktop。主机(Windows 10 Pro)被配置为每天在特定时间重新启动,Docker容器是Linux容器,按建议使用基于WSL2的引擎。

我已经在20台设备上测试了一年多,其中至少有5台PC现在存在Docker Desktop无法初始化的问题。这意味着Docker Desktop不再启动,直到您删除%APPDATA%中的某些文件夹,但即使这样做,对我来说,只有3次中的3次才能使Docker Desktop能够启动。有一次需要重新安装Docker Desktop,剩下的一次需要重新加载所有docker镜像并重新配置它们。大多数问题似乎是由于停电造成的。

最让人恼火的是更新,因为从一个版本到另一个版本,所有镜像和正在运行的容器都会消失,我需要重新配置它们,在过去的两个版本中发生过,但不是在所有计算机上。

另一方面,Linux机器没有任何问题。


你在生产环境中使用Windows 10专业版?那就是你的问题所在。 - TrojanName

0

我理解的是,Windows Server 上的容器应该可以用于生产环境,而 Windows 桌面上的容器只适用于开发和测试,而不适用于生产环境。我看到了一篇帖子“MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE FOR WINDOWS CONTAINER BASE IMAGE” https://learn.microsoft.com/en-us/virtualization/windowscontainers/images-eula,不确定这个许可证如何与此问题相关?


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