Cuándo elegir .NET para contenedores de Docker
Sugerencia
Este contenido es un extracto del libro electrónico, ".NET Microservices Architecture for Containerized .NET Applications" (Arquitectura de microservicios de .NET para aplicaciones de .NET contenedorizadas), disponible en Documentación de .NET o como un PDF descargable y gratuito que se puede leer sin conexión.
La naturaleza modular y ligera de .NET 8 resulta perfecta para contenedores. Al implementar e iniciar un contenedor, su imagen es mucho más pequeña con .NET 8 que con .NET Framework. En cambio, al usar .NET Framework para un contenedor, es necesario basar la imagen en la de Windows Server Core, que es mucho más pesada que las imágenes de Windows Nano Server o Linux que se usan para .NET 8.
Además, .NET 8 es multiplataforma, por lo que es posible implementar aplicaciones de servidor con imágenes de contenedor de Linux o Windows. Pero, si está utilizando el tradicional .NET Framework, solo puede implementar imágenes basadas en Windows Server Core.
A continuación, se ofrece una explicación más detallada sobre por qué elegir .NET 8.
Desarrollo e implementación multiplataforma
Obviamente, si su objetivo es tener una aplicación (servicio o aplicación web) que se pueda ejecutar en diferentes plataformas compatibles con Docker (Linux y Windows), la opción adecuada es .NET 8, puesto que .NET Framework solo es compatible con Windows.
.NET 8 también admite macOS como plataforma de desarrollo. Pero, al implementar contenedores en un host Docker, el host debe estar (actualmente) basado en Linux o Windows. Por ejemplo, en un entorno de desarrollo, podría utilizar una máquina virtual Linux que se ejecutara en un equipo Mac.
Visual Studio proporciona un entorno de desarrollo integrado (IDE) para Windows y admite el desarrollo en Docker.
También puede usar Visual Studio Code en macOS, Linux y Windows. Visual Studio Code es totalmente compatible con .NET 8, incluyendo IntelliSense y la depuración. Como VS Code es un editor ligero, puede usarlo para desarrollar aplicaciones en contenedor en la máquina junto con la interfaz de la línea de comandos de Docker y la CLI de .NET. También es posible utilizar .NET 8 con la mayoría de editores de terceros, como Sublime, Emacs, vi y el proyecto OmniSharp de código abierto, que también es compatible con IntelliSense.
Además de los editores e IDE, puede utilizar la CLI de .NET en todas las plataformas admitidas.
Uso de contenedores para nuevos proyectos (green field)
Normalmente los contenedores se usan en combinación con una arquitectura de microservicios, aunque también se pueden usar para contener servicios o aplicaciones web que siguen cualquier patrón de arquitectura. Aunque se puede usar .NET Framework en contenedores de Windows, la modularidad y ligereza de .NET 8 lo convierten en la opción perfecta para los contenedores y las arquitecturas de microservicio. Al crear e implementar un contenedor, su imagen es mucho más pequeña con .NET 8 que con .NET Framework.
Creación e implementación de microservicios en contenedores
Puede utilizar el tradicional .NET Framework para crear aplicaciones basadas en microservicios (sin contenedores) mediante el uso de procesos sin formato. De este modo, como .NET Framework ya está instalado y se comparte entre procesos, los procesos son ligeros y rápidos al iniciarse. Pero, si usa contenedores, la imagen del tradicional .NET Framework también se basa en Windows Server Core y esto hace que sea demasiado pesada para una opción de microservicios en contenedores. Sin embargo, los equipos también han estado buscando oportunidades para mejorar la experiencia de los usuarios de .NET Framework. Recientemente, el tamaño de las imágenes de contenedor de Windows Server Core se ha >reducido un 40 %.
Por otra parte, .NET 8 es la mejor opción si adoptó un sistema orientado a microservicios basado en contenedores, puesto que .NET 8 es ligero. Además, sus imágenes de contenedor relacionadas, ya sean de Linux o de Windows Nano Server, son eficientes y pequeñas, lo que hace que los contenedores sean ligeros y rápidos al iniciarse.
Un microservicio está pensado para ser lo más pequeño posible: que sea ligero al acelerar, que tenga una superficie pequeña, que tenga un pequeño contexto limitado (comprobar DDD, diseño basado en dominios), que represente una pequeña área de problemas y que se pueda iniciar y detener rápidamente. Para cumplir con estos requisitos, le recomendamos que utilice imágenes de contenedor pequeñas y que permitan crear una instancia rápidamente, como la imagen de contenedor de .NET 8.
Una arquitectura de microservicios también le permite mezclar tecnologías en un límite de servicio. Este enfoque permite migrar gradualmente a .NET 8 microservicios nuevos que funcionen junto con otros microservicios o con servicios desarrollados con Node.js, Python, Java, GoLang u otras tecnologías.
Implementación de alta densidad en sistemas escalables
Cuando en un sistema basado en contenedores se necesita la mejor densidad, granularidad y rendimiento posibles, .NET y ASP.NET Core son las mejores opciones. ASP.NET Core es hasta 10 veces más rápido que ASP.NET en el componente .NET Framework tradicional y conduce a otras tecnologías conocidas del sector de los microservicios, como servlets de Java, Go y Node.js.
Este enfoque es especialmente importante para las arquitecturas de microservicios, donde podría tener cientos de microservicios (contenedores) en funcionamiento. Con imágenes de ASP.NET Core (basadas en el entorno de ejecución de .NET) en Linux o Windows Nano, puede ejecutar el sistema con un número mucho menor de servidores o máquinas virtuales, con lo que, en última instancia, ahorra en costos de infraestructura y hospedaje.