Imágenes de contenedor de .NET

.NET proporciona varias imágenes de contenedor para distintos escenarios. En este artículo se describen los diferentes tipos de imágenes y cómo se usan. Para obtener más información sobre las imágenes oficiales, consulte el repositorio Docker Hub: Microsoft .NET.

Esquema de etiquetado

A partir de .NET 8, las imágenes de contenedor son más pragmáticas en cómo se diferencian. Las siguientes características se usan para diferenciar imágenes:

  • El moniker de la plataforma de destino (TFM) de la aplicación.
  • El sistema operativo, la versión y la arquitectura.
  • Tipo de imagen (por ejemplo, runtime, aspnet, sdk).
  • Variante de imagen (por ejemplo, *-distroless, *-chiseled).
  • Característica de imagen (por ejemplo, *-aot, *-extra).

Imágenes optimizadas para el tamaño

Las siguientes imágenes se centran en generar el tamaño de imagen más pequeño posible:

  • Alpine
  • Mariner sin distribución
  • Ubuntu cincelado

Estas imágenes son más pequeñas, ya que no incluyen dependencias de globalización como, ICU o tzdata. Estas imágenes solo funcionan con aplicaciones configuradas para el modo invariable de globalización. Para configurar una aplicación para la globalización invariable, agregue la siguiente propiedad al archivo del proyecto:

<PropertyGroup>
  <InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>

Sugerencia

Las imágenes del SDK no se generan para los tipos de imagen *-distroless o *-chiseled. Las imágenes compuestas son la oferta aspnet más pequeña para Core CLR.

Imágenes adecuadas para la globalización

Las aplicaciones en contenedores que requieren globalización inflan el tamaño de la imagen, ya que requieren dependencias de globalización. Las imágenes de Ubuntu y Debian ya tienen ICU y tzdata instaladas.

La dependencia tzdata se agregó a las siguientes imágenes:

  • runtime-deps:8.0-jammy
  • runtime-deps:8.0-bookworm-slim

Esta táctica de globalización se usa en las imágenes runtime, aspnet y sdk con la misma etiqueta.

Importante

Añadir tzdata a las imágenes de Debian Bookworm no tiene ningún efecto práctico, a menos que haya una actualización de tzdata (que aún no esté incluida en Debian), en cuyo caso las imágenes .NET incluirían un tzdata más reciente.

Algunos paquetes siguen siendo opcionales, como Kerberos, LDAP y msquic. Estos paquetes solo son necesarios en escenarios de nicho.

Imágenes basadas en escenarios

Las imágenes runtime-deps tienen un valor significativo, especialmente porque incluyen definiciones de puerto y usuario estándar. Son cómodas de usar para escenarios AOT independientes y nativos. Sin embargo, proporcionar únicamente imágenes runtime-deps necesarias para las imágenes en runtime y sdk no es suficiente para habilitar todos los escenarios imaginables o generar imágenes óptimas.

La necesidad de runtime-deps se extiende también a los tipos de imagen AOT, *-distroless y *-chiseled nativos. Para cada sistema operativo, se proporcionan tres variantes de imagen (todas en runtime-deps). Considere el siguiente ejemplo mediante imágenes *-chiseled:

  • 8.0-jammy-chiseled: imágenes de Core CLR, sin tzdata o ICU.
  • 8.0-jammy-chiseled-aot: imágenes para AOT nativo, sin tzdata, ICU o stdc++.
  • 8.0-jammy-chiseled-extra: imagen para Core CLR y AOT nativo, incluye tzdata, ICU y stdc++.

En términos de escenarios:

Las imágenes 8.0-jammy-chiseled son la base de las imágenes runtime y aspnet de la misma etiqueta. De forma predeterminada, las aplicaciones de AOT nativo pueden usar la imagen 8.0-jammy-chiseled-aot, ya que está optimizada para el tamaño. Las aplicaciones de AOT nativo y Core CLR autocontenido o aplicaciones de archivos únicos que requieren funcionalidad de globalización pueden usar 8.0-jammy-chiseled-extra.

Las imágenes de Alpine y Mariner usan el mismo esquema.

Nota:

Las imágenes de Debian y Ubuntu (no cinceladas) runtime-deps no tienen varias variantes.

Imágenes de contenedor de AOT nativo

Las imágenes de AOT nativo se publican en el repositorio del SDK y se etiquetan con el sufijo -aot. Estas imágenes permiten crear aplicaciones de AOT nativo. Se crean para distribuciones con imágenes runtime-deps:*-aot coincidentes. Estas imágenes son grandes, normalmente dos veces el tamaño de las imágenes de SDK normales.

Las imágenes de AOT se publican para:

  • Alpine
  • Mariner
  • Ubuntu

Para más información, consulte Implementación con AOT nativo

Repositorios de Docker Hub

Todas las imágenes oficiales de Microsoft para .NET se publican en la organización de Docker Hub microsoft-dotnet. Tenga en cuenta los siguientes repositorios.

Repositorios de imágenes estables de .NET:

Repositorio de imágenes Imagen
sdk mcr.microsoft.com/dotnet/sdk
aspnet mcr.microsoft.com/dotnet/aspnet
runtime mcr.microsoft.com/dotnet/runtime
runtime-deps mcr.microsoft.com/dotnet/runtime-deps
monitor mcr.microsoft.com/dotnet/monitor
aspire-dashboard mcr.microsoft.com/dotnet/aspire-dashboard
ejemplos mcr.microsoft.com/dotnet/samples

Repositorios de imágenes nocturnas de .NET:

Repositorio de imágenes Imagen
nightly-aspnet mcr.microsoft.com/dotnet/nightly/aspnet
nightly-monitor mcr.microsoft.com/dotnet/nightly/monitor
nightly-runtime-deps mcr.microsoft.com/dotnet/nightly/runtime-deps
nightly-runtime mcr.microsoft.com/dotnet/nightly/runtime
nightly-sdk mcr.microsoft.com/dotnet/nightly/sdk
nightly-aspire-dashboard mcr.microsoft.com/dotnet/nightly/aspire-dashboard

Repositorios de imágenes de .NET Framework:

Repositorio de imágenes Imagen
framework mcr.microsoft.com/dotnet/framework
framework-aspnet mcr.microsoft.com/dotnet/framework/aspnet
framework-runtime mcr.microsoft.com/dotnet/framework/runtime
framework-samples mcr.microsoft.com/dotnet/framework/samples
framework-sdk mcr.microsoft.com/dotnet/framework/sdk
framework-wcf mcr.microsoft.com/dotnet/framework/wcf

Consulte también