使用Linux机器部署Windows容器的Docker

39
我有一台安装了Docker主机的Linux服务器,内存为16GB。我想在上面部署一个Windows Server容器。这可行吗?有人刚刚尝试过这个解决方案吗?

其实...这今天可能是个可能性(2016年12月,14个月之后)。请看我修订过的答案。 - VonC
1个回答

41

更新2019

正如duct_tape_coder评论中所指出的:

微软已经改进了容器的网络选项,现在允许每个Pod使用多个容器,并且命名空间得到了改进


理论上(原始答案于2015年10月):

在Linux主机上没有运行“Windows容器”。
并且Linux容器不会直接在Windows服务器上运行,因为它依赖于对Linux内核的系统调用

您可以通过虚拟机在任何Windows机器上运行这些Linux容器。
这就是Docker工具箱将安装的内容。

很快将会支持在Windows上使用Docker,但那只适用于Windows容器,而不是Linux容器。

更新2017:是的,LinuxKit允许通过Hyper-V隔离包装器在Windows平台上运行Linux容器,通过从linuxkit构建的最小Linux操作系统来实现。
这仍然是相同的想法:Linux在Windows上运行在虚拟机中。
这不是在Windows服务器上部署Linux服务器:只是在运行在Windows虚拟机中的Linux服务器内部部署。


实际上......(2016年12月更新)

请参见 "Linux and Windows, living together, total chaos! (OK, Kubernetes 1.5)"

Kubernetes 1.5 包括了对 Windows Server 容器的 alpha 支持,这是一种类似 Docker 的共享内核模型,以及 Hyper-V 容器,这是一种单内核模型,提供了更好的多租户环境隔离性(代价是更大的延迟)。
最终结果是能够创建一个单一的 Kubernetes 集群,其中包括不仅是运行 Linux 容器的 Linux 节点或运行 Windows 容器的 Windows 节点,而且将两者并排放置,获得真正的混合体验。
例如,一个单独的服务可以有使用 Windows Server 容器的 POD 和使用 Linux 容器的其他 POD。

但是:

尽管它看起来完全功能,但在这个早期版本中似乎存在一些限制,包括: - Kubernetes主节点仍必须在Linux上运行,因为它的依赖关系是如何编写的。虽然可以移植到Windows,但目前团队认为更好地将重点放在客户端组件上。 - Windows容器没有本地支持网络覆盖层,因此网络受到限制。(有其他解决方案,但它们不是本地可用的。)Kubernetes Windows SIG正在与Microsoft合作解决这些问题,他们希望在明年初发布Kubernetes 1.6时已经取得了进展。 - 在Windows容器之间进行网络传输更加复杂,因为每个容器都有自己的网络命名空间,因此现在建议您使用单容器pod。 - 运行在Windows Server容器中的应用程序可以使用Windows支持的任何语言运行。如果.NET应用程序是使用.NET Core编写的,则可以在Linux容器中运行.NET应用程序。Nano Server操作系统也支持.NET Core,可以部署在Windows Server容器上。

2
我是唯一一个将问题解释为在Linux主机上运行Windows容器的Docker引擎吗? - OK999
如果Docker可以运行二进制文件,那么它也可以运行虚拟机软件,比如QEMU。我认为这是可能的,只是还没有实现。 - m3nda
你可以在Windows上运行Linux容器。请参考https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/获取更多详细信息。 - It's a trap
@It'satrap,出于同样的原因,它仍然是这样。您需要在Windows平台上使用Hyper-V隔离包装器才能运行Linux容器。 - VonC
@It'satrap 我已经编辑了答案,以使我的观点更清晰:https://stackoverflow.com/posts/33190605/revisions - VonC
显示剩余13条评论

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