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 容器。
有了它,恕我直言,在生产环境中以这种方式运行它并不是最好的主意。
此外,此答案提供了更多详细信息。