Saltar al contenido

Imágenes de contenedor de .NET Core ahora publicadas en Microsoft Container Registry

Ahora estamos publicando imágenes de contenedor de .NET Core en Microsoft Container Registry (MCR). También hemos realizado otros cambios en las imágenes que publicamos, descritos en esta publicación.

Importante: Necesitarás cambiar FROM declaraciones en Dockerfile archivos y docker pull comandos como resultado de estos cambios. Las referencias 3.0 deben cambiarse ahora. La mayoría de los usos de 1.xy 2.x se pueden cambiar con el tiempo. El nuevo esquema de etiquetas se describe en esta publicación y se proporciona en el repositorio de microsoft-dotnet-core, nuestro nuevo hogar en Docker Hub.

Resumen de Cambios:

  • Las imágenes de .NET Core ahora se publican en Microsoft Container Registry.
  • Las actualizaciones seguirán publicándose en Docker Hub, para .NET Core 1.xy 2.x.
  • .NET Core 3.0 solo se publicará en MCR.
  • Las imágenes de Nano Server 2016 ya no se admiten ni se publican.

Registro de contenedores de Microsoft (MCR)

Los equipos de Microsoft ahora están publicando imágenes de contenedores en MCR. Hay dos razones clave para este cambio:

  • Podemos establecer MCR como la fuente oficial de imágenes de contenedor proporcionadas por Microsoft, y luego promocionar y distribuir más fácilmente esas imágenes a múltiples servicios de contenedor, como Docker Hub y Red Hat OpenShift.
  • Podemos utilizar Microsoft Azure como una red de distribución de contenido global (CDN) para entregar imágenes de contenedores proporcionadas por Microsoft desde ubicaciones más cercanas a usted. Esto significa que la extracción de imágenes de su contenedor será más rápida y tendrá una confiabilidad mejorada en muchos casos.

Desde una perspectiva arquitectónica, MCR es un servicio replicado globalmente que maneja solicitudes de manifiesto de imagen. Utiliza el servicio Azure CDN para solicitudes de capa de imagen. Esta separación no es observable con docker pull, pero es fácil de ver cuando inspecciona imágenes de .NET Core con curl. El uso de recursos replicados globalmente ayuda a demostrar nuestro compromiso de brindar una gran experiencia a los usuarios de contenedores en todo el mundo.

Continuar brindando soporte a Docker Hub

Continuaremos manteniendo las páginas de repositorio de Docker Hub para que pueda descubrir y aprender sobre las imágenes de .NET Core. Las URL del sitio web de Docker Hub que ha utilizado para los repositorios de Microsoft seguirán funcionando y se reenviarán a ubicaciones actualizadas en Docker Hub.

Utilizará y verá MCR como el backend de almacenamiento para las imágenes de contenedores de Microsoft, PERO la forma principal de aprender sobre las imágenes y etiquetas de contenedores de Microsoft será a través de un centro de contenedores o sitio web, que para muchos usuarios seguirá siendo Docker Hub.

Las imágenes de Docker Hub existentes se mantendrán como están. De hecho, continuaremos actualizando el repositorio de microsoft / dotnet existente, como se describe más adelante en esta publicación.

Las imágenes de .NET Core están en MCR

Comenzamos a publicar imágenes en MCR en febrero de 2019, comenzando con el repositorio “nocturno” de .NET Core. A principios de marzo, también trasladamos el repositorio de .NET Core.

En Docker Hub, teníamos un repositorio muy grande que ofrecía cuatro tipos de imágenes para cuatro distribuciones de sistemas operativos y tres tipos de CPU. Este amplio conjunto de etiquetas creado para nombres de etiquetas muy largos e incluso archivos README más largos. Decidimos aprovechar esta oportunidad para volver a factorizar .NET Core en varios repositorios, uno para cada tipo de imagen. También agregamos un “repositorio de productos” que agrupa todos nuestros repositorios.

Los nuevos repositorios siguen:

Nota: .NET Core 2.0 está al final de su vida útil (EOL), por lo que no estará disponible en MCR, solo en Docker Hub, como imágenes no admitidas. Querrá pasar a .NET Core 2.1, que es una versión de soporte a largo plazo (LTS).

Actualizar etiquetas de imagen de .NET Core

Los siguientes ejemplos le muestran lo nuevo docker pull las cadenas de etiquetas se parecen a las de .NET Core. Se muestran como docker pull, pero las mismas cadenas deben usarse en Dockerfile archivos para FROM declaraciones.

Todos estos ejemplos tienen como objetivo .NET Core 2.1, pero se usa el mismo patrón en cualquier versión de .NET Core compatible:

  • SDK: docker pull mcr.microsoft.com/dotnet/core/sdk:2.1
  • Tiempo de ejecución de ASP.NET Core: docker pull mcr.microsoft.com/dotnet/core/aspnet:2.1
  • Tiempo de ejecución de .NET Core: docker pull mcr.microsoft.com/dotnet/core/runtime:2.1
  • Dependencias de .NET Core en tiempo de ejecución: docker pull mcr.microsoft.com/dotnet/core/runtime-deps:2.1

El siguiente ejemplo demuestra cómo se ve una instrucción FROM para los nuevos repositorios MCR, usando el dotnet/core/sdk repo como ejemplo:

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

Si usa Alpine, por ejemplo, las etiquetas se extienden fácilmente para incluir Alpine, usando el dotnet/core/runtime repo como ejemplo:

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

Puede consultar los ejemplos de Docker de .NET Core para ver cómo se usan las cadenas de etiquetas en la práctica.

Soporte continuo para Docker Hub

Hemos estado publicando imágenes en Docker Hub durante tres o cuatro años. Es probable que haya miles (si no millones) de scripts y Dockerfiles escritos que esperan imágenes de contenedor .NET en Docker Hub. Como se indicó anteriormente, esos artefactos continuarán funcionando como están.

Publicamos múltiples formas de etiquetas que brindan diferentes niveles de conveniencia y consistencia. Estas diferencias giran en torno al grado en que se especifican los números de versión, desde que están completamente especificados hasta que no están presentes. Las siguientes etiquetas de ejemplo demuestran las diversas formas de etiquetas, de la menos específica a la más específica:

  • latest
  • 2.2-runtime
  • 2.1.6-sdk

Continuaremos publicando imágenes para los dos primeros formularios de etiquetas (versiones sin versión y de dos partes) durante la vida útil admitida de las versiones asociadas. No publicaremos ninguna versión nueva de tres partes (como el último ejemplo) en Docker Hub, sino solo en MCR. Esperamos que la mayoría de los scripts y archivos Dockerfile utilicen cualquiera de las dos primeras formas de etiquetas, o se actualicen manualmente para adoptar etiquetas de tres partes con una cadencia regular. Si se actualizan manualmente, se pueden actualizar manualmente para extraer imágenes de MCR.

Imágenes de .NET Core 3.0

El cambio a MCR se está produciendo en la mitad de la versión .NET Core 3.0, que nos dio la opción de hacer .NET Core 3.0 solo para MCR. Esto hace que nuestro enfoque de MCR para .NET Core 3.0 sea diferente al de otras versiones compatibles. Inicialmente publicamos imágenes de vista previa de .NET Core 3.0 en Docker Hub. A partir de .NET Core 3.0 Preview 3, las imágenes de .NET Core 3.0 solo se publicarán en MCR. Es importante que los usuarios de .NET Core 3.0 pasen pronto a MCR.

A continuación, se muestran ejemplos de cadenas de etiquetas de .NET Core 3.0 para ayudarlo a migrar a MCR:

  • SDK: docker pull mcr.microsoft.com/dotnet/core/sdk:3.0
  • Tiempo de ejecución de ASP.NET Core: docker pull mcr.microsoft.com/dotnet/core/aspnet:3.0
  • Tiempo de ejecución de .NET Core: docker pull mcr.microsoft.com/dotnet/core/runtime:3.0
  • Dependencias de .NET Core en tiempo de ejecución: docker pull mcr.microsoft.com/dotnet/core/runtime-deps:3.0

El siguiente ejemplo demuestra cómo se ve una instrucción FROM para .NET Core 3.0 en MCR, usando el dotnet/core/runtime repo como ejemplo:

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

Las imágenes de .NET Core 3.0 Preview 1 y Preview 2 seguirán estando disponibles en Docker Hub, para etiquetas de versión de tres partes. Para Preview 1 y Preview 2, también publicamos etiquetas de versión de dos partes, como 3.0-sdk y 3.0-runtime. Nos preocupaba que algunos usuarios vieran esas etiquetas de versión de dos partes para .NET Core 3.0 en Docker Hub y creyeran que eran imágenes compatibles y que se actualizarían en el futuro. No lo estarán. Para mitigar eso, eliminamos las etiquetas de versión de dos partes para 3.0 en Docker Hub. Este enfoque nos permite comunicar claramente durante el período de vista previa que todos deben pasar a MCR para obtener imágenes 3.0 lo antes posible. Le pedimos disculpas si este cambio le afectó negativamente.

Las vistas previas de Visual Studio 2019 usan las etiquetas 3.0 de dos partes que se eliminaron. Los usuarios deben actualizar su Dockerfile archivos para asegurarse de que sus proyectos se construyan correctamente. Hemos proporcionado un Dockerfile de muestra que proporciona el FROM declaraciones para proyectos de .NET Core 3.0 ASP.NET Core en Visual Studio 2019.

Imágenes de Nano Server 2016

Nano Server 2016 ya no es compatible con el equipo de Windows y ya no publican imágenes de contenedor actualizadas para esa versión. Como resultado, dejamos de publicar imágenes de Nano Server 2016 en Docker Hub y MCR.

Esto afecta a las etiquetas de imagen de .NET Core de diferentes formas:

  • Las imágenes .NET Core 2.xy 3.0 son compatibles y están disponibles para todas las versiones compatibles de Nano Server a partir de la versión 1709. Esto significa que las etiquetas de manifiesto 2.xy 3.0 se pueden usar en Windows 10, versión 1709+ y Windows Server , versión 1709+. También puede usar etiquetas que no sean de manifiesto para esas versiones.
  • Solo producimos imágenes de Nano Server, versión 1809 para .NET Core 1.x. Anteriormente, solo producíamos imágenes de Nano Server, versión 2016 para .NET Core 1.x. Habría utilizado una etiqueta de manifiesto (como 1.1-runtime o 1.1) o un nanoserver-sac2016 etiqueta para extraer esas imágenes. Puede extraer las nuevas imágenes de .NET Core 1.x Nano Server, versión 1809 mediante una etiqueta de manifiesto o una nanoserver-1809 etiqueta. Estas etiquetas solo son compatibles con Windows 10, versión 1809 y Windows Server 2019

Las imágenes de .NET Core para Nano Server 2016 todavía están disponibles en Docker Hub y MCR y no se eliminarán. Puede seguir utilizándolos, pero no son compatibles y no recibirán nuevas actualizaciones. Si necesita hacer esto y usar etiquetas de manifiesto previamente, como 1.1-sdk, ahora puede usar las siguientes etiquetas MCR (las variantes de Docker Hub son similares):

  • 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

Tenga en cuenta que .NET Core 1.x dejará de ser compatible el 27 de junio de 2019. Recomendamos que los usuarios de .NET Core 1.x pasen a .NET Core 2.1.

En DockerCon 2019

Enviaremos algunos miembros del equipo a DockerCon 2019. Contáctenos @ dotnet@microsoft.com si desea reunirse y hablar sobre cómo usa .NET y Docker juntos. Nos encantaría conocer su enfoque y los desafíos que enfrenta, o los cambios que desea que hagamos.

Hemos estado asistiendo a DockerCon durante algunos años y siempre disfrutamos del espectáculo. Es una buena oportunidad para conocer las nuevas formas en que las personas utilizan los contenedores y también las nuevas funciones que se avecinan. Como ejemplo, todavía estamos esperando soporte oficial para BuildKit. Es la función que más queremos que se convierta en parte del conjunto de funciones predeterminadas de Docker.

Clausura

Seguimos mejorando la experiencia con el uso de imágenes de contenedor .NET Core de Microsoft. La publicación de imágenes de contenedor de .NET Core en MCR será una mejora, ya que MCR se replica globalmente.

Las imágenes de contenedor de .NET Framework aún no están disponibles en MCR. Los trasladaremos a MCR en breve.

Consulte Uso de .NET y Docker juntos si desea obtener más información sobre el uso de Docker.

La publicación apareció primero en .NET Blog.