Quando escolher o .NET para contêineres do Docker
Gorjeta
Este conteúdo é um trecho do eBook, .NET Microservices Architecture for Containerized .NET Applications, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.
A modularidade e a natureza leve do .NET 8 o tornam perfeito para contêineres. Quando você implanta e inicia um contêiner, sua imagem é muito menor com o .NET 8 do que com o .NET Framework. Por outro lado, para usar o .NET Framework para um contêiner, você deve basear sua imagem na imagem do Windows Server Core, que é muito mais pesada do que as imagens do Windows Nano Server ou Linux que você usa para o .NET 8.
Além disso, o .NET 8 é multiplataforma, portanto, você pode implantar aplicativos de servidor com imagens de contêiner do Linux ou do Windows. No entanto, se você estiver usando o .NET Framework tradicional, você só pode implantar imagens com base no Windows Server Core.
A seguir está uma explicação mais detalhada do porquê escolher o .NET 8.
Desenvolvimento e implantação de plataforma cruzada
Claramente, se o seu objetivo é ter um aplicativo (aplicativo ou serviço Web) que possa ser executado em várias plataformas suportadas pelo Docker (Linux e Windows), a escolha certa é o .NET 8, porque o .NET Framework só suporta Windows.
O .NET 8 também suporta macOS como plataforma de desenvolvimento. No entanto, quando você implanta contêineres em um host Docker, esse host deve (atualmente) ser baseado em Linux ou Windows. Por exemplo, em um ambiente de desenvolvimento, você pode usar uma VM Linux em execução em um Mac.
O Visual Studio fornece um ambiente de desenvolvimento integrado (IDE) para Windows e oferece suporte ao desenvolvimento do Docker.
Você também pode usar o Visual Studio Code no macOS, Linux e Windows. O Visual Studio Code suporta totalmente o .NET 8, incluindo IntelliSense e depuração. Como o VS Code é um editor leve, você pode usá-lo para desenvolver aplicativos em contêineres na máquina em conjunto com a CLI do Docker e a CLI do .NET. Você também pode direcionar o .NET 8 com a maioria dos editores de terceiros, como Sublime, Emacs, vi e o projeto de código aberto OmniSharp, que também fornece suporte ao IntelliSense.
Além dos IDEs e editores, você pode usar a CLI do .NET para todas as plataformas suportadas.
Utilização de contentores para novos projetos ("green-field")
Os contêineres são comumente usados em conjunto com uma arquitetura de microsserviços, embora também possam ser usados para conteinerizar aplicativos Web ou serviços que seguem qualquer padrão de arquitetura. Você pode usar o .NET Framework em contêineres do Windows, mas a modularidade e a natureza leve do .NET 8 o tornam perfeito para contêineres e arquiteturas de microsserviços. Quando você cria e implanta um contêiner, sua imagem é muito menor com o .NET 8 do que com o .NET Framework.
Criar e implantar microsserviços em contêineres
Você pode usar o .NET Framework tradicional para criar aplicativos baseados em microsserviços (sem contêineres) usando processos simples. Dessa forma, como o .NET Framework já está instalado e compartilhado entre processos, os processos são leves e rápidos para iniciar. No entanto, se você estiver usando contêineres, a imagem para o .NET Framework tradicional também é baseada no Windows Server Core e isso a torna muito pesada para uma abordagem de microsserviços em contêineres. No entanto, as equipes também têm procurado oportunidades para melhorar a experiência dos usuários do .NET Framework. Recentemente, o tamanho das imagens de contêiner do Windows Server Core foi reduzido para >40% menor.
Por outro lado, o .NET 8 é o melhor candidato se você estiver adotando um sistema orientado a microsserviços baseado em contêineres porque o .NET 8 é leve. Além disso, suas imagens de contêiner relacionadas, para Linux ou Windows Nano Server, são enxutas e pequenas, tornando os contêineres leves e rápidos para iniciar.
Um microsserviço deve ser o menor possível: ser leve ao girar, ter uma pegada pequena, ter um pequeno contexto delimitado (verificar DDD, Domain-Driven Design), representar uma pequena área de preocupações e ser capaz de iniciar e parar rapidamente. Para esses requisitos, você desejará usar imagens de contêiner pequenas e rápidas de instanciar, como a imagem de contêiner do .NET 8.
Uma arquitetura de microsserviços também permite que você misture tecnologias através de um limite de serviço. Essa abordagem permite uma migração gradual para o .NET 8 para novos microsserviços que funcionam em conjunto com outros microsserviços ou com serviços desenvolvidos com Node.js, Python, Java, GoLang ou outras tecnologias.
Implantação de alta densidade em sistemas escaláveis
Quando seu sistema baseado em contêiner precisa da melhor densidade, granularidade e desempenho possíveis, o .NET e o ASP.NET Core são suas melhores opções. ASP.NET Core é até 10 vezes mais rápido do que o ASP.NET no .NET Framework tradicional e leva a outras tecnologias populares do setor para microsserviços, como servlets Java, Go e Node.js.
Essa abordagem é especialmente relevante para arquiteturas de microsserviços, onde você pode ter centenas de microsserviços (contêineres) em execução. Com imagens ASP.NET Core (baseadas no tempo de execução do .NET) no Linux ou Windows Nano, você pode executar seu sistema com um número muito menor de servidores ou VMs, economizando custos em infraestrutura e hospedagem.