.NET核心容器映像现已发布到Microsoft容器注册表

现在,我们将.NET Core容器映像发布到Microsoft容器注册表(MCR) 。 我们还对发布的图像进行了其他更改,如本文所述。


重要提示:由于这些更改,您将需要更改Dockerfile文件中的FROM语句和Dockerfile docker pull命令。 3.0引用现在需要更改。 大多数1.x和2.x用法可以随时间更改。 新的标记方案已在本文中描述,并在microsoft-dotnet-core存储库 (我们在Docker Hub上的新家)中提供。


变更摘要:


  • .NET Core映像现已发布到Microsoft容器注册表。
  • .NET Core 1.x和2.x的更新将继续发布到Docker Hub。
  • .NET Core 3.0将仅发布到MCR。
  • Nano Server 2016映像不再受支持或发布。

图片

本文在我们的博客中

Microsoft容器注册表(MCR)


Microsoft团队现在正在将容器映像发布到MCR 。 发生此更改的主要原因有两个:


  • 我们可以将MCR建立为Microsoft提供的容器映像的正式来源,然后更轻松地将这些映像提升并联合到多个容器服务,例如Docker Hub和Red Hat OpenShift。
  • 我们可以将Microsoft Azure用作全球内容分发网络(CDN),以便从您附近的位置传递Microsoft提供的容器映像。 这意味着在许多情况下,您的容器映像拉取将更快并具有更高的可靠性。

从体系结构的角度来看,MCR是处理图像清单请求的全局复制服务。 它使用Azure CDN服务处理图像层请求。 使用docker pull无法观察到这种分离,但是当您使用curl检查.NET Core映像时,很容易看到。 使用全球复制的资源有助于证明我们致力于为全球容器用户提供出色体验的承诺。


继续支持Docker Hub


我们将继续维护Docker Hub回购页面,以便您可以发现和了解.NET Core映像 。 您用于Microsoft仓库的Docker Hub网站URL将继续有效,并转发到Docker Hub上的更新位置。


您将使用MCR作为Microsoft容器映像的存储后端,并将其视为Microsoft容器映像的存储后端,但是了解Microsoft容器映像和标签的主要方式将是通过容器中心或网站,对于许多用户而言,它将继续是Docker Hub。


现有的Docker Hub映像将保持原样。 实际上,我们将继续更新现有的microsoft / dotnet存储库,如本文后面所述。


.NET Core映像位于MCR上


我们 .NET Core“每晚”仓库开始,于2019年2月开始将图像发布到MCR 。 3月初,我们也移动了.NET Core存储库


在Docker Hub上,我们有一个非常大的存储库,可以为四种操作系统发行版和三种CPU类型提供四种映像类型。 这些广泛的标记集可用于非常长的标记名甚至更长的自述文件。 我们决定借此机会将.NET Core重构为多个存储库 ,每种图像类型一个。 我们还添加了一个“产品回购”,将我们所有的回购组合在一起。


新的回购协议如下:



注意: .NET Core 2.0是寿命终止(EOL),因此它将作为不支持的映像在MCR(仅在Docker Hub上不可用。 您将需要使用.NET Core 2.1,这是一个长期支持(LTS)版本


更新.NET Core映像标记


以下示例显示了.NET Core的新docker pull标签字符串的外观。 它们显示为docker pull ,但是需要在Dockerfile文件中使用相同的字符串作为FROM语句。


这些示例均以.NET Core 2.1为目标,但是在所有受支持的.NET Core版本中使用相同的模式:


  • SDK: docker pull mcr.microsoft.com/dotnet/core/sdk:2.1
  • ASP.NET Core运行时: docker pull mcr.microsoft.com/dotnet/core/aspnet:2.1
  • .NET Core运行时: docker pull mcr.microsoft.com/dotnet/core/runtime:2.1
  • .NET Core运行时依赖项: docker pull mcr.microsoft.com/dotnet/core/runtime-deps:2.1

以下示例以dotnet/core/sdk库为例,演示了新MCR存储库的FROM语句的外观:


 FROM mcr.microsoft.com/dotnet/core/sdk:2.1 

例如,如果您使用Alpine,则以dotnet/core/runtime回购为例,可以轻松地将标签扩展为包括Alpine:


 FROM mcr.microsoft.com/dotnet/core/runtime:2.1-alpine 

您可以查看.NET Core Docker示例,以了解在实践中如何使用标记字符串。


继续支持Docker Hub


我们已经将映像发布到Docker Hub已有三四年了。 可能已经编写了成千上万个(如果不是数百万个)脚本和Dockerfile ,它们期望在Docker Hub上具有.NET容器映像。 如上所述,这些工件将继续按原样工作。


我们发布多种形式的标签,以提供不同级别的便利性和一致性。 这些差异取决于版本号的指定程度,从完全指定到根本不存在。 以下示例标记演示了从最小到最具体的各种标记形式:


  • latest
  • 2.2-runtime
  • 2.1.6-sdk

我们将在相关版本支持的生命周期内继续发布前两个标签形式(无版本和两部分版本)的图像。 我们不会将任何新的三部分版本(如上一个示例)发布到Docker Hub,而只会发布到MCR。 我们期望大多数脚本和Dockerfile文件使用前两种形式的标签中的一种,或者以某种常规节奏手动更新以采用三部分标签。 如果手动更新它们,则可以手动更新它们以从MCR中提取图像。


.NET Core 3.0映像


迁移到MCR的过程是在.NET Core 3.0版本中进行的,这使我们可以选择仅将.NET Core 3.0设为MCR。 这使得我们针对.NET Core 3.0的MCR的方法不同于其他受支持的版本。 我们最初将.NET Core 3.0预览图像发布到Docker Hub。 从.NET Core 3.0 Preview 3开始 ,.NET Core 3.0映像将仅发布到MCR。 .NET Core 3.0用户必须尽快过渡到MCR,这一点很重要。


以下是.NET Core 3.0标记字符串的示例,以帮助您迁移到MCR:


  • SDK: docker pull mcr.microsoft.com/dotnet/core/sdk:3.0
  • ASP.NET Core运行时: docker pull mcr.microsoft.com/dotnet/core/aspnet:3.0
  • .NET Core运行时: docker pull mcr.microsoft.com/dotnet/core/runtime:3.0
  • .NET Core运行时依赖项: docker pull mcr.microsoft.com/dotnet/core/runtime-deps:3.0

下面的示例以dotnet/core/runtime回购为例,演示MCR上.NET Core 3.0的FROM语句的外观:


 FROM mcr.microsoft.com/dotnet/core/runtime:3.0 

.NET Core 3.0预览1和预览2映像将在Docker Hub上保持可用,包括三个部分的版本标签。 对于Preview 1和Preview 2,我们还发布了两部分的版本标签,例如3.0-sdk3.0-runtime 。 我们担心某些用户会在Docker Hub上看到用于.NET Core 3.0的两部分版本标签,并认为这些标签是受支持的映像,并且会在将来进行更新。 他们不会。 为了减轻这种情况,我们在Docker Hub上删除了由两部分组成的3.0版版本标签。 这种方法使我们能够在预览期间清晰地传达每个人都需要尽快移至MCR以获得3.0图像的信息。 如果此更改对您造成负面影响,我们深表歉意。


Visual Studio 2019预览版使用已删除的两部分3.0标签。 用户必须更新其Dockerfile文件以确保其项目正确构建。 我们提供了一个示例Dockerfile ,该文件为Visual Studio 2019中的.NET Core 3.0 ASP.NET Core项目提供了正确的FROM语句。


Nano Server 2016图片


Windows团队不再支持Nano Server 2016 ,他们不再发布该版本的更新的容器映像。 因此,我们已停止将Nano Server 2016映像发布到Docker Hub和MCR。


这会以几种不同的方式影响.NET Core图像标签:


  • 清单(AKA“ 多体系结构 ”)标记不再包含Nano Server 2016的条目。这意味着像2.1-sdk这样的清单标记将不再在Windows Server 2016,Nano Server 2016或Windows 10 1607上工作。若要仍然使用基于Nano Server 2016的图像(即使不再受支持),则需要使用包含Windows版本的标签(这些是非清单标签),例如mcr.microsoft.com/dotnet/core/runtime:2.1-nanoserver-sac2016
  • 从1709版开始,.NET Core 2.x和3.0映像受支持,并且可用于所有受支持的Nano Server版本。这意味着2.x和3.0清单标记可以在Windows 10、1709+版和Windows Server上使用。 ,版本1709+。 您也可以为这些版本使用非清单标签。
  • 我们仅为.NET Core 1.x生产Nano Server版本1809图像。 以前,我们只为.NET Core 1.x生产Nano Server版本2016映像。 您将使用清单清单标签(如1.1-runtime1.1 )或nanoserver-sac2016标签来拉取这些图像。 您可以使用清单标签或nanoserver-1809标签提取新的.NET Core 1.x Nano Server版本1809图像。 仅Windows 10版本1809和Windows Server 2019支持这些标记

Nano Server 2016的.NET Core映像仍可在Docker Hub和MCR上使用,并且不会被删除。 您可以继续使用它们,但不支持它们,也不会获得新的更新。 如果您需要这样做,并且以前使用过清单文件(如1.1-sdk ,则现在可以使用以下MCR标签(Docker Hub变体相似):


  • 2.2.2-nanoserver-sac2016 2.2-nanoserver-sac2016
  • 2.1.8-nanoserver-sac2016 2.1-nanoserver-sac2016
  • 1.1.11-nanoserver-sac2016 1.1-nanoserver-sac2016
  • 1.0.14-nanoserver-sac2016 1.0-nanoserver-sac2016

请注意.NET Core 1.x将于2019年6月27日停止支持 。 我们建议.NET Core 1.x用户迁移到.NET Core 2.1。


在DockerCon 2019上


我们正在向DockerCon 2019派遣一些团队成员。 如果您想见面并讨论如何一起使用.NET和Docker,请联系我们@ dotnet@microsoft.com 。 我们很想听听您的方法,面临的任何挑战或您希望我们做出的改变。


我们已经参加了DockerCon几年了,一直很喜欢这个节目。 这是一个学习人们使用容器的新方式以及即将出现的新功能的好机会。 例如,我们仍在等待BuildKit的官方支持。 这是我们最希望看到的功能,成为Docker默认功能集的一部分。


闭幕


我们将继续改善使用Microsoft的.NET Core容器映像的体验。 由于MCR是全局复制的,因此将.NET Core容器映像发布到MCR将是一项改进。


.NET Framework容器映像在MCR上尚不可用。 我们将很快将其移至MCR。


如果要了解有关使用Docker的更多信息,请参阅一起使用.NET和 Docker。

Source: https://habr.com/ru/post/zh-CN444010/


All Articles