Windows 容器可以托管在 Linux 上吗?

新手上路,请多包涵

是否可以在 Linux 上运行 Windows 容器?该场景基于用 .NET (旧网络)编写的应用程序,想要使用 Docker 运行此应用程序的 Linux 用户 需要在 --- 上提供 localhost net462 编写的 API。

我正在使用 Docker Desktop for Windows 的 beta 版本。

如果不是,那为什么 Windows 可以运行 Linux 容器而不是反之呢?


随着时间的流逝,这个问题很受欢迎,我想在这里添加一个注释,解决方法是使用新的 .NET Standard 。它允许我将 4.6.2 框架打包到一个新库中。

原文由 Sebastian 506563 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

TL;博士:

问: Windows 容器可以在 Linux 上运行吗?

答: 不,他们不能。

容器使用的是底层操作系统资源和驱动,所以 Windows 容器只能在 Windows 上运行,Linux 容器只能在 Linux 上运行。

问: 但是 Docker for Windows 呢?还是其他基于 VM 的解决方案?

答: Docker for Windows 允许您模拟在 Windows 上运行的 Linux 容器,但在底层创建了一个 Linux VM,因此 Linux 容器仍然在 Linux 上运行,而 Windows 容器在 Windows 上运行

奖励:阅读 这篇关于在 Windows 上运行 Linux docker 容器的非常好的文章

问: 那么,如果我想在容器中运行,我应该如何处理 .NET Framework 462 应用程序?

答: 这取决于。考虑以下建议:

  • 如果可能,请移至 .NET Core。由于 .NET Core 带来了对 .NET Framework 大部分主要功能的支持,而 .NET Framework 4.8 将是 .NET Framework 的最后一个版本

  • 如果您无法迁移到 .NET Core - 正如@Sebastian 提到的那样 - 您可以将库转换为 .NET Standard ,并拥有两个版本的应用程序 - 一个在 .NET Framework 4.6.2 上,一个在 .NET Core 上 - 它是并不总是很明显。 Visual Studio 很好地支持它(具有多目标),但某些依赖项可能需要格外小心。

  • (不太推荐)在某些情况下,您可以运行 Windows 容器。 Windows 容器越来越成熟,在 Kubernetes 等平台上得到了更好的支持。但为了能够运行 .NET Framework 代码,您仍然需要在“Server Core”的基础镜像上运行,该镜像占用大约 1.4 GB。在同样罕见的情况下,您可以将代码迁移到 .NET Core,但仍可在 Windows Nano 服务器 上运行,图像大小为 95 MB。

也留下历史的旧更新

更新 2: 08.2018

如果您使用 Docker-for-Windows,您现在可以同时运行 Windows 和 Linux 容器: 同时 _运行 Docker Windows 和 Linux 容器_

奖励: 与问题没有直接关系,但您现在不仅可以运行 Linux 容器本身,还可以运行像 Kubernetes 这样的编排器: Kubernetes 现在在 Docker 桌面稳定通道中可用

2018 年更新:

最初的答案总体上是正确的, 但是 几个月前,Docker 添加了 实验性功能 LCOW官方 GitHub 存储库)。

这篇文章

Docker for Windows 不是已经运行 Linux 容器了吗?这是正确的。 Docker for Windows 可以运行 Linux 或 Windows 容器,通过 Hyper-V Moby Linux VM 支持 Linux 容器(从 Docker for Windows 17.10 开始,此 VM 基于 LinuxKit)。

使用 LCOW 运行 Linux 容器的设置比以前的体系结构简单得多,之前的体系结构 Hyper-V Linux VM 运行 Linux Docker 守护程序以及所有容器。使用 LCOW,Docker 守护进程作为 Windows 进程运行(与运行 Docker Windows 容器时相同),每次启动 Linux 容器时,Docker 都会启动一个最小的 Hyper-V 管理程序,运行具有 Linux 内核、runc 和容器进程的 VM在上面运行。

因为只有一个 Docker 守护程序,而且该守护程序现在在 Windows 上运行,所以 很快就可以在同一个网络命名空间中并排运行 Windows 和 Linux Docker 容器。这将为 Windows 上的 Docker 用户解锁许多令人兴奋的开发和生产场景。

原来的:

正如@PanagiotisKanavos 在评论中提到的,容器不是用于虚拟化的,它们 正在使用主机的资源。因此,目前 Windows 容器无法在 Linux 机器上“按原样”运行。

但是- 你可以通过使用 VM 来做到这一点 - 因为它适用于 Windows。您可以在 Linux 主机上安装 Windows VM,这将允许运行 Windows 容器。

有了它,恕我直言,在 生产 环境中以这种方式运行它并不是最好的主意。

此外, 此答案 提供了更多详细信息。

原文由 evgenyl 发布,翻译遵循 CC BY-SA 4.0 许可协议

不,您不能直接在 Linux 上运行 Windows 容器。

但是你可以在 Windows 上运行 Linux。

Windows Server 2016 随附 Ubuntu 操作系统的基本映像( 在 2016 年 9 月的 beta 服务包之后)。这就是您可以在 Windows 上运行 Linux 而不是其他方式的原因。看看这里。 最后,Linux 容器可以使用 Docker 的 LinuxKit 在 Windows 上运行

您可以通过右键单击托盘菜单中的 Docker 在 OS 容器 Linux 和 Windows 之间进行切换。

在此处输入图像描述

在此处输入图像描述

原文由 Karthikeyan VK 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏