Los contenedores son una de las formas más populares de implementar y hospedar aplicaciones en la nube, con herramientas como Docker, Kubernetes y Podman. Muchos desarrolladores optan por los contenedores porque es sencillo empaquetar una aplicación con sus dependencias y conseguir que esa aplicación se ejecute de forma confiable en cualquier host de contenedor. Hay una amplia compatibilidad con el uso de .NET con contenedores.
Docker proporciona una excelente introducción a los contenedores. Docker Desktop: Community Edition es una buena herramienta para usar contenedores en la máquina de escritorio para desarrolladores.
Las imágenes de .NET se actualizan periódicamente cada vez que se publica una nueva revisión de .NET o cuando se actualiza una imagen base del sistema operativo.
Las imágenes de contenedor chiseled son imágenes de contenedor de Ubuntu con un conjunto mínimo de componentes requeridos por el runtime de .NET. Estas imágenes son ~100 MB más pequeñas que las imágenes de Ubuntu normales y tienen menos CVE, ya que tienen menos componentes. En concreto, no contienen un shell ni un administrador de paquetes, lo que mejora significativamente su perfil de seguridad. También incluyen un usuario no root y están configurados con ese usuario habilitado.
En el siguiente ejemplo se muestra cómo compilar y ejecutar una imagen de contenedor en unos pocos pasos rápidos (compatible con .NET 8 y .NET 7.0.300).
$ dotnet new webapp -o webapp
$ cd webapp/
$ dotnet publish -t:PublishContainer
MSBuild version 17.8.3+195e7f5a3 for .NET
Determining projects to restore...
All projects are up-to-date for restore.
webapp -> /home/rich/webapp/bin/Release/net8.0/webapp.dll
webapp -> /home/rich/webapp/bin/Release/net8.0/publish/
Building image 'webapp' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
Pushed image 'webapp:latest' to local registry via 'docker'.
$ docker run --rm -d -p 8000:8080 webapp
7c7ad33409e52ddd3a9d330902acdd49845ca4575e39a6494952b642e584016e
$ curl -s http://localhost:8000 | grep ASP.NET
<p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c7ad33409e5 webapp "dotnet webapp.dll" About a minute ago Up About a minute 0.0.0.0:8000->8080/tcp, :::8000->8080/tcp jovial_shtern
$ docker kill 7c7ad33409e5
docker init es una nueva opción para los desarrolladores que desean usar Dockerfiles.
Puertos
La asignación de puertos es una parte clave del uso de contenedores. Los puertos deben publicarse fuera del contenedor para responder a solicitudes web externas. Las imágenes de contenedor de ASP.NET Core han cambiado en .NET 8 para escuchar en el puerto 8080, de manera predeterminada. .NET 6 y 7 escuchan en el puerto 80.
En el ejemplo anterior con docker run, el puerto host 8000 se asigna al puerto de contenedor 8080. Kubernetes funciona de forma similar.
Las variables de entorno ASPNETCORE_HTTP_PORTS, ASPNETCORE_HTTPS_PORTS y ASPNETCORE_URLS se pueden usar para configurar este comportamiento.
Usuarios
A partir de .NET 8, todas las imágenes incluyen un usuario no root llamado app. De forma predeterminada, las imágenes chiseled se configuran con este usuario habilitado. La característica de publicar aplicación como contenedor de .NET (que se muestra en la sección Compilar imágenes de contenedor) también configura imágenes con este usuario habilitado de forma predeterminada. En todos los demás escenarios, el usuario app se puede establecer manualmente, por ejemplo con la instrucción Dockerfile de USER. Si se ha configurado una imagen con app y los comandos deben ejecutarse como root, la instrucción USER se puede usar para establecer en el usuario en root.
Azure App Service
Implemente aplicaciones web o API con contenedores en un entorno PaaS.
Azure Container Apps
Ejecute las cargas de trabajo de contenedor sin administrar servidores, orquestaciones o infraestructura y aproveche la compatibilidad nativa con Dapr y KEDA para la observabilidad y el escalado a cero.
Azure Container Instances
Cree contenedores individuales en la nube sin ningún servicio de administración de nivel superior.
Azure Batch
Ejecute trabajos de proceso repetitivos mediante contenedores.
Azure Service Fabric
Eleve, cambie y modernice aplicaciones .NET a microservicios utilizando contenedores Windows y Linux.
Azure Container Registry
Almacene y administre imágenes de contenedor en todos los tipos de implementaciones de Azure.
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.
Comentarios de .NET
.NET es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Cree soluciones de un extremo a otro en Microsoft Azure para crear Azure Functions, implementar y administrar aplicaciones web, desarrollar soluciones que usen Azure Storage, etc.