但两者之间存在根本差异,可根据需要实现的目标选择框架。

 

 

.NET Framework项目在容器上运行

限制:

1.对比 .NET Core 项目在容器上运行,.NET Framework项目无法跨平台运行(e.g不支持Linux)

2.对Windows系统有要求(较老的windows系统,虚拟化做的不好,可能不支持 & windows系统需要花钱)

 

何时为 Docker 容器选择 .NET Framework

  • 可能只想使用 Docker 容器来简化部署(即便未创建微服务)。
    • 对于此方案,大多数情况下无需将现有应用程序迁移到 .NET Core;可以使用包含传统 .NET Framework 的 Docker 容器。 
    • 不过,在扩展现有的应用程序(例如,在 ASP.NET Core 中编写新服务)时,建议使用 .NET Core。
    • 在这种情况下,即使部署的是整体式应用程序,也可以为当前的 .NET Framework 应用程序使用 Docker 和 Windows 容器。
  • 使用不可用于 .NET Core 的第三方 .NET 库或 NuGet 包。

    • 通过此包,只需略微修改或无需修改即可将大多数现有代码重新编译到 .NET Standard 2.x 以在 Windows 上运行; 

    • 支持 .NET Standard 2.0 的 .NET Framework 4.6.1)。

    • 如果这些软件包对于应用程序至关重要,那么将需要在 Windows 容器上使用 .NET Framework。
  • 使用不可用于 .NET Core 的 .NET 技术

    • 虽然某些技术将在更高版本中可用,但其他技术不适用于 .NET Core 面向的新应用程序模式,因此可能永远不可用。
    • 以下列表展示了在 .NET Core 3.1 中不可用的大多数技术:

      • 目前没有将 ASP.NET Web 窗体引入 .NET Core 的计划。

      • Windows 兼容包中。

      • 尚未计划将其引入 .NET Core。


  • 使用不支持 .NET Core 的平台或 API

    •  

       某些 Microsoft 和第三方平台不支持 .NET Core。

    • 如果 Azure 中的任何平台或服务仍然不支持 .NET Core 及其客户端 API,则可以使用 Azure 服务中的等效 REST API 或 .NET Framework 上的客户端 SDK。
      • Azure SDK 最新版本页中查看可用的 Azure SDK。

 

 

决策表:用于 Docker 的 .NET Framework

对于 Linux 容器,你需要基于 Linux 的 Docker 主机(VM 或服务器);对于 Windows 容器,你需要基于 Windows Server 的 Docker 主机(VM 或服务器)。

 

体系结构/应用类型 Linux 容器 Windows 容器
容器上的微服务 .NET Core .NET Core
单一应用程序 .NET Core .NET Core
一流性能和可扩展性 .NET Core .NET Core
到容器的 Windows Server 旧应用程序(“棕色字段”)迁移 -- .NET Framework
基于容器的新开发(“绿色字段”) .NET Core .NET Core
ASP.NET Core .NET Core .NET Framework
ASP.NET 4(MVC 5、Web API 2 和 Web 窗体) -- .NET Framework
SignalR 服务 .NET Core 2.1 或更高版本 .NET Core 2.1 或更高版本
WCF、WF 和其他旧框架 .NET Core 中的 WCF(仅客户端库) .NET Core 中的 WCF(仅客户端库)
Azure 服务的消耗 (最终大部分 Azure 服务都将为 .NET Core 提供客户端 SDK) (最终大部分 Azure 服务都将为 .NET Core 提供客户端 SDK)

 

何时为 Docker 容器选择 .NET Core

在部署和启动容器时,使用 .NET Core 时容器的映像大小要远小于使用 .NET Framework 时的大小。 

与此相反,若要为某个容器使用 .NET Framework,必须以 Windows Server Core 映像作为映像的基础,此映像在体量上远大于用于 .NET Core 的 Windows Nano Server 或 Linux 映像。

 

此外,.NET 核心可跨平台应用,这样便可使用 Linux 或 Windows 容器映像部署服务器应用。 

但如果使用传统的 .NET Framework,只能够基于 Windows Server Core 部署映像。

跨平台开发和部署

 显然,如果目标是获得可在 Docker 支持的多个平台(Linux 和 Windows)上运行的应用程序(Web 应用或服务),正确的选择是 .NET Core,因为 .NET Framework 仅支持 Windows。

例如,在开发环境中,可使用 Mac 上运行的 Linux VM。

 

还可以使用大多数第三方编辑器(如 Sublime、Emacs、VI)和同时提供 IntelliSense 支持的开源 OmniSharp 项目来面向 .NET Core。

 

Visual Studio 提供用于 Windows 的集成开发环境 (IDE) 并支持 Docker 开发。

对于使用 Mac 计算机工作而又希望使用功能强大的 IDE 的开发者而言,这应当是理想之选。

除了 IDE 和编辑器,还可为所有支持的平台使用 .NET Core CLI安装 .NET Core SDK。

为新(“绿地”)项目使用容器

在创建和部署容器时,使用 .NET Core 时容器的映像大小要远小于使用 .NET Framework 时的大小。

在容器上创建和部署微服务

Windows Server Core 容器映像的大小已减小 40% 以上。

此外,与之相关的容器映像,无论是 Linux 还是 Windows Nano Server,都精简而小巧,让容器变得轻量,从而能够快速启动。

为满足这些要求,需要使用可快速实例化的轻量型容器映像,例如 .NET Core 容器映像。

这样,在其他微服务或服务使用 Node.js、 Python、 Java、 GoLang 或其他技术开发的一起工作的新微服务的逐步迁移到.NET 核心。

在可缩放的系统中部署高密度

ASP.NET Core 的运行速度比传统 .NET Framework 中的 ASP.NET 高出 10 倍,领先于其他用于微服务的行业技术(例如 Java servlets、Go 和 node.js)。

运行系统时所需的服务器或 VM 数量要少得多,最终可以节省基础结构和托管的费用

 

 

由于 Docker 支持多种操作系统,且鉴于 .NET Framework 和 .NET Core 之间的差异,应根据所使用的框架,面向特定操作系统和特定版本

这两种 Windows 版本分别提供 .NET Framework 和 .NET Core 各自所需的特征(Windows Server Core 中的 IIS 与 Nano Server 中自承载的 web 服务器,如 Kestrel)。

正式的 .NET Docker 映像(如 Debian)中提供并支持多个发行版本。

 

 

 

更大映像的 Windows Server Core 为目标。 

过云优化、使用 Kestrel、更小且启动速度更快的 Windows Nano Server

使用 Kestrel、更小且启动速度更快

 

不是常见的 Docker 方案

GitHub 注释中所述。

 

选择操作系统和版本,如下例所示:

 

图像 注释
mcr.microsoft.com/dotnet/core/runtime:3.1 .NET Core 3.1 多体系结构:支持 Linux 和 Windows Nano Server,具体取决于 Docker 主机。
mcr.microsoft.com/dotnet/core/aspnet:3.1 ASP.NET Core 的 aspnetcore 映像具有多个优化。
mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim Linux Debian 发行版上的 .NET Core 3.1 仅运行时
mcr.microsoft.com/dotnet/core/aspnet:3.1-nanoserver-1809 Windows Nano Server(Windows Server 版本 1809)上的 .NET Core 3.1 仅运行时

 

官方 .NET Docker 映像

存储库中公开提供。 

取决于 .NET 版本以及操作系统和版本(Linux Debian、Linux Alpine、Windows Nano Server、Windows Server Core 等)。

https://hub.docker.com/_/microsoft-dotnet-core/) 提供。

仅在 Docker 中心中提供,可在此处找到更新的地址以拉取映像。

大多数映像存储库提供广泛的标记,以帮助选择特定的框架版本以及 OS(Linux 发行版或 Windows 版本)

 

适用于开发与生产的 .NET Core 和 Docker 映像优化

为开发人员生成 Docker 映像时,Microsoft 侧重于以下主要方案:

  • 用于开发和生成 .NET Core 应用的映像 。

  • 用于运行 .NET Core 应用的映像 。

有助于优化开发、生成和部署应用程序的单独进程

在开发和生成过程中

包括编译器和任何其他 .NET 依赖项

用于持续集成 (CI) 环境,或在使用 Docker 多阶段生成时用于生成环境

生产中

不需要编译 C# 代码,但在使用生成容器运行 dotnet 生成或 dotnet 发布时需要。

预实时编译(在运行时进行从中间语言到本机语言的编译)包的映像

从注册表中提取映像速度会很快

有助于决定使用哪一个,具体取决于需要的版本,如下表所示:

 

Image 注释
mcr.microsoft.com/dotnet/core/aspnet:3.1 ASP.NET Core,包含仅运行时和 ASP.NET Core 优化,适用于 Linux 和 Windows(多体系结构)
mcr.microsoft.com/dotnet/core/sdk:3.1 .NET Core,包含 SDK,适用于 Linux 和 Windows(多体系结构)

 

相关文章:

  • 2021-05-22
  • 2022-02-27
  • 2022-12-23
  • 2022-03-08
  • 2021-09-27
  • 2019-12-30
  • 2022-01-19
猜你喜欢
  • 2022-01-01
  • 2022-12-23
  • 2021-10-19
  • 2022-12-23
  • 2021-11-19
  • 2018-01-08
  • 2021-06-12
相关资源
相似解决方案