Containerize C# Application Easily with the .NET CLI (en inglés)
Los contenedores son una herramienta poderosa, pero para muchos desarrolladores, la idea de poner una aplicación de C# en un contenedor puede resultar abrumadora. Configurar un archivo Docker y gestionar las dependencias manualmente puede ser complicado. Sin embargo, como explica Tim Corey en su vídeo, .NET CLI simplifica este proceso, permitiendo a los desarrolladores contenerizar sus aplicaciones sin necesidad de un Dockerfile.
En este artículo, profundizaremos en la contenedorización de una aplicación C# utilizando el enfoque paso a paso de Tim en su vídeo, "Containerize Your C# Application Easily with the .NET CLI" Siguiendo la guía de Tim, entenderemos cómo publicar una aplicación .NET en un contenedor Docker sin esfuerzo.
Introducción a .NET CLI para contenedores
Al principio del vídeo, Tim explica la necesidad de la contenedorización. Destaca que, aunque los contenedores son una gran herramienta, el proceso de crear un Dockerfile y configurarlo correctamente puede ser complejo.
En lugar de crear manualmente un archivo Dockerfile, Tim presenta un enfoque más sencillo utilizando la CLI .NET. Este método permite a los desarrolladores crear una aplicación en contenedores sin tener que escribir manualmente un archivo Dockerfile.
Tim también aclara que este vídeo forma parte de su serie de formación de 10 minutos, que se centra en introducciones rápidas y eficaces a temas técnicos.
La configuración de la aplicación
Tim comienza utilizando como ejemplo una aplicación Web API mínima. La aplicación contiene un único punto de acceso llamado /messages, que devuelve algunos datos.
Para demostrar el comportamiento de la aplicación antes de la contenedorización, Tim la ejecuta localmente. Al acceder al punto de acceso /messages, confirma que funciona correctamente fuera de un contenedor.
Antes de proceder a la contenedorización, comprueba también que:
- Docker está instalado y funcionando en su máquina.
- No hay imágenes ni contenedores Docker existentes al principio.
Esto garantiza que, cuando se cree un nuevo contenedor, podamos ver claramente los cambios.
Preparación para la contenedorización
Para contenerizar la aplicación, Tim pasa a la línea de comandos dentro del directorio del proyecto. A continuación, ejecuta el siguiente comando:
dotnet publish -o:Linux -a:x64 -p:PublishProfile=DefaultContainer -c:Release
Tim desglosa cada parte del comando:
-o:Linux→ Publica la aplicación para un contenedor basado en Linux.-a:x64→ Especifica la arquitectura como de 64 bits.-p:PublishProfile=DefaultContainer→ Utiliza la configuración predeterminada del contenedor.-c:Release→ Publica la aplicación en modo de liberación para un mejor rendimiento.
Tim subraya que los contenedores Linux son preferibles a los contenedores Windows porque estos últimos sirven principalmente de puente para las aplicaciones .NET Framework.
Publicación y creación de un contenedor
Una vez ejecutado el comando de publicación, Tim explica que .NET CLI determinará automáticamente las configuraciones necesarias y empaquetará todo en un contenedor. Señala que:
- En este método no es necesario un archivo Dockerfile.
- El proceso construye la aplicación y la contenedoriza en un solo paso.
- La imagen de base utilizada es el contenedor de ejecución .NET 8 de Microsoft.
Después de publicar, verifica Docker Desktop y confirma que se ha creado la nueva imagen del contenedor, background-demo. El tamaño inicial del contenedor es de 221 MB.
Tim asegura a los espectadores que este tamaño puede reducirse más adelante.
Ejecutar el contenedor
Para probar la aplicación en contenedores, Tim inicia el contenedor directamente desde Docker Desktop. Como aún no hay contenedores en ejecución, hace clic en "Ejecutar" y establece una configuración opcional:
- Asigna el puerto interno del contenedor (asignado aleatoriamente) al puerto 8080 de la máquina anfitriona.
Tras el lanzamiento, accede a la aplicación mediante un navegador web. Inicialmente, acceder a la URL raíz da un error 404, pero al navegar a /messages se muestra con éxito los datos esperados.
Tim destaca un punto importante:
- La aplicación se ejecuta en hora UTC dentro del contenedor, que puede diferir de la zona horaria de la máquina local.
También señala que, dado que la aplicación se publicó en modo de lanzamiento, Swagger UI está desactivada por defecto.
Optimización del tamaño del contenedor
En este momento, el tamaño predeterminado del contenedor es de 221 MB, que Tim reconoce como bastante grande. Para reducir el tamaño, introduce una imagen de base más ligera.
Al modificar el archivo Program.cs, establece la familia del contenedor a jammy-chiseled, una imagen más pequeña basada en Ubuntu:
builder.Services.Configure<ContainerOptions>(options => options.ContainerFamily = "jammy-chiseled");
builder.Services.Configure<ContainerOptions>(options => options.ContainerFamily = "jammy-chiseled");
A continuación, vuelve a ejecutar el comando de publicación y, tras reconstruir el contenedor, comprueba de nuevo el tamaño de la imagen.
El nuevo tamaño de la imagen es de 113 MB, lo que supone una reducción de unos 100 MB A pesar de su menor tamaño, la aplicación funciona de forma idéntica.
Borrar y volver a crear contenedores
Tim muestra cómo borrar el contenedor para limpiar el espacio de trabajo. Sin embargo, la imagen Docker sigue estando disponible, por lo que el contenedor se puede volver a crear si es necesario.
Destaca que, una vez construido el contenedor, se puede:
- Se ejecuta localmente para desarrollo y pruebas.
- Empujado a un registro de contenedores como Docker Hub o Azure Container Registry.
- Se utiliza como base para una aplicación web desplegada en la nube.
Conclusión y reflexiones finales
Tim concluye el vídeo reforzando las principales ventajas de utilizar la CLI .NET para la contenedorización:
- No es necesario un archivo Dockerfile: .NET CLI se encarga de todo automáticamente.
- Proceso rápido y sencillo - Con un solo comando, se puede contenerizar una aplicación.
- Imágenes más pequeñas y optimizadas – Usar
jammy-chiseledreduce el tamaño del contenedor. - Despliegue sin problemas: el contenedor puede enviarse a varios servicios en la nube.
Reflexiones finales
El enfoque de Tim para contenerizar aplicaciones C# con la CLI .NET es sencillo, rápido y eficaz. Siguiendo su método, los desarrolladores pueden crear y optimizar contenedores sin necesidad de tener amplios conocimientos de Docker.
Al aprovechar los contenedores Linux, las imágenes base optimizadas y los comandos de publicación simplificados, esta técnica permite a los desarrolladores contenerizar sus aplicaciones de forma eficaz con el mínimo esfuerzo.
Si quieres profundizar más, no dejes de ver el vídeo de Tim Corey. Proporciona un recorrido claro y paso a paso de todo el proceso.
