Quando escolher o .NET para os contêineres do Docker

Dica

Esse conteúdo é um trecho do eBook da Arquitetura de Microsserviços do .NET para os Aplicativos .NET em Contêineres, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

A modularidade e a natureza leve do .NET 8 fazem com que ele seja perfeito para contêineres. Quando você implanta e inicia um contêiner, a imagem é muito menor com o .NET 8 do que com o .NET Framework. Por outro lado, para usar o .NET Framework em um contêiner, você precisa basear a imagem na imagem do Windows Server Core, que é muito mais pesada do que as imagens do Windows Nano Server ou do Linux que você usa para o .NET 8.

Além disso, o .NET 8 é multiplataforma, para que você possa implantar aplicativos de servidor com as imagens de contêiner do Linux ou do Windows. No entanto, se você estiver usando o .NET Framework tradicional, só poderá implantar imagens baseadas no Windows Server Core.

Veja a seguir uma explicação mais detalhada do motivo para escolher o .NET 8.

Desenvolvendo e implantando uma multiplataforma

Se o objetivo é ter um aplicativo (aplicativo Web ou serviço) que possa ser executado em várias plataformas compatíveis com o Docker (Linux e Windows), a escolha certa é o .NET 8, porque o .NET Framework só dá suporte ao Windows.

O .NET 8 também dá suporte ao macOS como uma plataforma de desenvolvimento. No entanto, quando você implanta contêineres em um host do 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 IDE (ambiente de desenvolvimento integrado) para Windows e é compatível com o desenvolvimento do Docker.

O Visual Studio para Mac é um IDE, a evolução do Xamarin Studio, que é executada em macOS e dá suporte ao desenvolvimento de aplicativos baseados em Docker. Essa ferramenta deve ser a escolha preferida dos desenvolvedores que trabalham em computadores Mac que também desejam usar um IDE potente.

Você também pode usar o Visual Studio Code no macOS, no Linux e no Windows. O Visual Studio Code dá suporte total ao .NET 8, incluindo IntelliSense e depuração. Como o VS Code é um editor leve, você pode usá-lo para desenvolver aplicativos conteinerizados no computador 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 OmniSharp de código aberto, que também dá suporte ao IntelliSense.

Além dos IDEs e editores, você pode usar a CLI do .NET para todas as plataformas com suporte.

Usando contêineres para novos projetos ("campo verde")

Contêineres são comumente usados em conjunto com uma arquitetura de microsserviços, embora também possam ser usados para colocar em contêineres aplicativos Web ou serviços que sigam 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 fazem com que ele seja perfeito para as arquiteturas de contêineres e de microsserviços. Quando você cria e implanta um contêiner, a imagem é muito menor com o .NET 8 do que com o .NET Framework.

Criar e implantar microsserviços em contêineres

É possível 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 já é compartilhado entre processos, os processos são leves inicializam rapidamente. No entanto, se você estiver usando contêineres, a imagem do .NET Framework tradicional também será baseada no Windows Server Core e isso a tornará muito pesada para uma abordagem de microsserviços em contêineres. No entanto, as equipes têm buscado oportunidades de aprimorar a experiência dos usuários do .NET Framework também. Recentemente, o tamanho das imagens de contêiner do Windows Server Core foi reduzido para >40% a menos.

Por outro lado, o .NET 8 é o melhor candidato se você está adotando um sistema orientado a microsserviços baseado em contêineres, porque o .NET 8 é leve. Além disso, as imagens de contêiner relacionadas, para Linux ou Windows Nano Server, são de enxutas e pequenas, fazendo com que os contêineres sejam leves e rápidos para começar a usar.

Um microsserviço deve ser o menor possível: ser leve ao iniciar, ocupar um pequeno espaço, ter um Contexto limitado pequeno (confira DDD, Design Voltado a Domínio), para representar uma pequena área de preocupações e ser capaz de ser iniciado e interrompido rapidamente. Para esses requisitos, convém usar imagens de contêiner pequenas e rápidas para criar instâncias, como a imagem de contêiner do .NET 8.

Uma arquitetura de microsserviços também permite uma combinação de tecnologias em um limite de serviço. Essa abordagem permite uma migração gradual para o .NET 8 de 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.

Implantando alta densidade em sistemas escalonáveis

Quando o sistema baseado em contêiner precisa do melhor nível possível de densidade, granularidade e desempenho, o .NET e o ASP.NET Core são as melhores opções. O ASP.NET Core é até dez 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 é muito relevante para arquiteturas de microsserviço, em que pode haver centenas de microsserviços (contêineres) em execução. Com as imagens do ASP.NET Core (com base no runtime do .NET) no Linux ou no Windows Nano, você pode executar o sistema com um número muito menor de servidores ou VMs, poupando custos de infraestrutura e hospedagem.