.NET 5已经发布多时了,众所周知,其对容器的支持又上了一个台阶。那么主要有哪些变化呢,接下来我们一起来了解吧。

Microsoft's Plans for .NET 5 | Microsoft Docs
Microsoft's Plans for .NET 5 | Microsoft Docs

.NET 5 简介

Introducing .NET5 – What's The Future Of .NET Framework
Introducing .NET5 – What's The Future Of .NET Framework

在开始之前,我们先来了解一下.NET 5。

.NET 5.0是.NET Core 3.1之后的.NET Core的下一个主要版本。微软将此新版本命名为.NET 5.0而不是.NET Core 4.0的原因有两个:

  • 跳过版本号4.x,以避免与.NET Framework 4.x混淆。
  • 从名称中删除了“ Core”,以强调这是.NET未来的主要实现。与.NET Core或.NET Framework相比,.NET 5.0支持更多类型的应用程序和平台。

ASP.NET Core 5.0基于.NET 5.0,但保留名称“ Core”以避免将其与ASP.NET MVC 5混淆。同样,Entity Framework Core 5.0保留名称“ Core”以避免将其与Entity Framework 5和6混淆。

值得注意的是,.NET 5并没有计划支持ASP.NET Web Form和Windows工作流(WF),因此.NET 5并不能完全代替.NET Framework。.NET 5的新增功能已经有很多朋友介绍过了,这里我们这里就不介绍了,有兴趣的也可以直接查看官方文档。

.NET 5针对容器的支持和优化

本篇内容侧重说明.NET 5 对容器的支持和优化。这里我们先来看官方的态度:

  • 持续投入大量资金支持

我们认为容器是最重要的云趋势,并在这方面投入了大量资金。我们正在以多种方式投资容器,在.NET软件堆栈的多个级别上。首先是我们对基本面的投资,这越来越多地受到容器场景和部署容器应用的开发者的影响。

  • 优化体验

我们正在让.NET与容器的协作变得更容易。我们已经添加了OpenTelemeter支持,这样您就可以从您的应用程序中捕获分布式跟踪和指标。DotNet-monitor是一种新工具,旨在作为从.NET进程访问诊断信息的主要方式。特别是,我们已经开始构建dotnet-monitor的容器变体,您可以将其用作应用程序侧车。最后,我们正在构建DotNet/Tye,以此来提高微服务开发人员的工作效率,包括开发和部署到Kubernetes环境。

注意:Tye是一微软开发的一个开发人员工具,可简化开发,测试和部署微服务以及分布式应用程序。Tye包括一个本地协调器,以使开发微服务变得更加容易,并且能够以最少的配置将微服务部署到Kubernetes。

Type是完全开源的,项目地址:https://github.com/dotnet/tye

官方博客介绍:https://devblogs.microsoft.com/aspnet/introducing-project-tye/

  • 支持cgroup v2

NET运行时现在支持cgroup v2,我们预计它将在2020年后成为与容器相关的重要API。Docker目前使用的是cgroup v1(已经被.NET支持)。相比之下,cgroup v2比cgroup v1更简单、更高效、更安全。您可以通过我们2019年Docker更新了解更多关于cgroup和Docker资源限制的信息。Linux发行版和容器运行时正在添加对cgroup v2的支持。一旦cgroup v2环境变得更加普遍,.Net 5.0将在cgroup v2环境中正常工作。这归功于Omair Majid,他在Red Hat支持.NET。

  • 提供Windows Server Core的镜像

除了Nano Server,我们现在还发布Windows Server Core镜像。我们添加了Server Core,是因为我们收到了客户的反馈,他们想要一个与Windows Server完全兼容的.NET镜像。我们还进行了其他更改,以减小Windows服务器核心镜像的大小。这些改进带来了很大的不同,但都是在Windows Server 2019发布之后做出的。然而,它们将使下一个Windows Server LTSC版本受益。

  • 更改仓库名称

作为使用“.NET”作为产品名称的一部分,我们现在将.NET Core 2.1、3.1和.NET5.0镜像发布到mcr.microsoft.com/dotnet系列的Repos中,而不是发布到mcr.microsoft.com/dotnet/core。我们将继续将.NET Core 2.1和3.1双重发布到以前的位置,同时支持这些版本。.Net 5.0图像将仅发布到新位置。请相应地更新您的From语句和脚本。

之前的名称:

  • dotnet/core: .NET Core
  • dotnet/core/sdk: .NET Core SDK
  • dotnet/core/aspnet: ASP.NET Core Runtime
  • dotnet/core/runtime: .NET Core Runtime
  • dotnet/core/runtime-deps: .NET Core Runtime Dependencies
  • dotnet/core/samples: .NET Core Samples
  • dotnet/core-nightly: .NET Core (Preview)
  • dotnet/core-nightly/sdk: .NET Core SDK (Preview)
  • dotnet/core-nightly/aspnet: ASP.NET Core Runtime (Preview)
  • dotnet/core-nightly/runtime: .NET Core Runtime (Preview)
  • dotnet/core-nightly/runtime-deps: .NET Core Runtime Dependencies (Preview)

新的名称:

  • dotnet

  • dotnet/sdk

  • dotnet/aspnet

  • dotnet/runtime

  • dotnet/runtime-deps

  • dotnet/samples -> available once .NET 5.0 releases as GA

  • dotnet-nightly

  • dotnet-nightly/sdk

  • dotnet-nightly/aspnet

  • dotnet-nightly/runtime

  • dotnet-nightly/runtime-deps

  • 减小镜像大小,尤其是显著的减少在多阶段构建时运行时镜像的大小

作为.NET5.0的一部分,微软将SDK镜像重新建立在ASP.NET镜像之上,而不是构建包-dep,以显著减小在多阶段构建场景中拉取的聚合镜像的大小。

此更改对于多阶段构建有以下好处,其中包含一个示例Dockerfile:

Ubuntu 20.04 Focus的多阶段构建成本:

Pull ImageBeforeAfter
sdk:5.0-focal 268 MB 232 MB
aspnet:5.0-focal 64 MB 10 KB (manifest only)

减少了约: 100 MB (-30%)

Debian 10 Buster的多阶段构建成本:

Pull ImageBeforeAfter
sdk:5.0 280 MB 218 MB
aspnet:5.0 84 MB 4 KB (manifest only)

减少了约: 146 MB (-40%)

有关更多详细信息,请参见Dotnet/Dotnet-docker#1814。

此更改有助于多阶段构建,其中SDK和您的目标aspnet或运行时镜像的版本相同(我们预计这是常见的情况)。在进行此更改时,(例如)aspnet拉入将是不可行的,因为您将通过最初的SDK拉入拉出aspnet层。

围绕对Alpine和Windows Nano Server做了类似的更改。Alpine和Nano Server都没有Buildpack-dep镜像。但是,Alpine和Nano Server的SDK镜像之前并不是在ASP.NET镜像之上构建的。

最后

从.NET Core开始到.NET 5,我们看到了微软紧跟前沿技术踏实前进之心,我们也相信.NET尤其是随着.NET 5的到来会让.NET重铸辉煌——积极拥抱前沿技术,完全开源,积极创新和改变,生产力爆棚,性能爆表,没有理由不会越来越好。当然在我们使用的过程中,多少可能会遇到一些问题,但是容器方面的问题笔者很多都已经讲过了,比如《如何让Docker镜像飞起来》和 《自动构建自己的ASP.NET Core基础镜像》。如果对容器完全没有基础,可以阅读本人书籍: 《Docker+Kubernetes应用开发与快速上云》以及【麦扣聊技术】公众号的系列Docker教程文章。

最后,附上本人已构建好的腾讯云.NET 5公共镜像,以方便各位直接享用:

  • ccr.ccs.tencentyun.com/magicodes/aspnetcore-runtime:5.0
  • ccr.ccs.tencentyun.com/magicodes/aspnetcore-sdk:5.0
  • ccr.ccs.tencentyun.com/magicodes/netcore-sdk:5.0
  • ccr.ccs.tencentyun.com/magicodes/netcore-runtime:5.0

构建脚本见本人的开源库:https://github.com/xin-lai/aspnetcore-docker

标签智能推荐:

Docker最全教程.NET5进一步拥抱容器技术

相信.NET尤其是随着.NET5的到来会让.NET重铸辉煌——积极拥抱前沿技术,完全开源,积极创新和改变,生产力爆棚,性能爆表,没有理由不会越来越好。当然在我们使用的过程中,多少可能会遇到一些问题,但是容器方面的问题笔者很多都已经讲过了,比如《如何让Docker镜像飞起来》和 《自动构建自己的ASP.NETCore基础镜像》。如果对容器完全没有基础,可以阅读本人书籍: 《Doc

.NET平台系列31:.NET团队送给.NET开发人员的云原生学习资源汇总

icrosoftDoc是微软官方提供的功能最全、最详细的产品级文档管理系统。它提供给广大微软系开发者从入门、进阶到高级的全套技术指南以及视频、开源项目等资源。是.NETer不可或缺的资源宝库。https://docs.microsoft.com/zh-cn/。入门教程如果是初学者,请开始使用ASP.NETWebAPI、Docker构建简单的微服务终结点,并将它们部署到AzureKubernetes

Docker商业版受限,胖容器是个选择

次Docker开源版本没有受到影响与限制,但开源不等于不受管制。从长远发展角度而言,企业也需要提前考虑其他策略,来预防可能出现的进一步限制。为预防和降低风险,企业可考虑使用国内容器云厂商自行维护的容器版本,或选择同时支持多种开源容器运行时的容器云产品。 2019年底,博云发布了自主研发且自行维护的容器版本:BeyondVM胖容器(兼容传统应用,蓄力边缘云——博云胖容器解决方案)。Beyo

解决github不能访问的问题

Core部署到linux(CentOS)最全解决方案,常规篇.NETCore部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx).NETCore部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx或Jexus).NETCore部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)

Docker入门系列之二:Docker术语

第1部分《Docker-第1部分:什么是Docker?》我们探讨了Docker容器的概念以及Docker容器的重要性,文章的最后我们把Docker类比成了一个披萨,并把它拆解开来解释Docker容器的结构和用途。在本文中,将分享Docker生态系统中的常用的术语。遵循本系列第一篇文章中的食品主题,这里我们将甜甜圈想象成一个Docker容器。Docker生态系统术语为了方便大家理解,我将Docker

.NET平台系列21:云原生时代 .NET5 雄霸天下

几年最热门的技术架构,是不同思想的集合,集目前各种热门技术之大成。在这一波技术变革中,.NET5已经独具优势,有机会逆袭称王,作为.NET开发者,更是应该积极拥抱。.NET5于2020年11月正式发布。.NET5让.NETFramework和.NETCore走向统一,打通了7大方向的统一开发,是.NET技术发展的集大成者。.NETCore启动于2016年,跟K8S同年诞生,既拥有着悠久的历史积累,

通过SignalR技术整合即时通讯(IM)在.NET中应用落地

决方案,高阶篇(Docker+Nginx或Jexus).NETCore部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)一网打尽,一文讲通虚拟机VirtualBox及Linux使用一文讲通.NETCore部署到WindowsIIS最全解决方案常用linux命令,开发必备5.1、SignalR开发相关史上最全面的SignalR系列教程-目

.Net Core发布到Linux下验证码失效处理方案详解

Core部署到linux(CentOS)最全解决方案,常规篇.NETCore部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx).NETCore部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx或Jexus).NETCore部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)

RDIFramework.NET WinForm版新增报表管理功能模块

开发-目录汇总.NETCore部署到linux(CentOS)最全解决方案,常规篇.NETCore部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx).NETCore部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx或Jexus).NETCore部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现

RDIFramework.NET WinForm版新增通知公告、系统新闻模块

开发-目录汇总.NETCore部署到linux(CentOS)最全解决方案,常规篇.NETCore部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx).NETCore部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx或Jexus).NETCore部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现