Durante a última edição do DockerCon, a Microsoft compartilhou diversas melhorias realizadas no .Net Core durante o ano passado, tudo com objetivo de aumentar a experiência da utilização do .NET e Docker juntos.
Todos as melhorias foram focadas no .Net Core 3.0. A mudança mais fundamental foi a redução de memória no runtime do .Net Core (CoreCLR) utilizada por padrão. O CoreCLR gerencia a execução de todos programas .NET Core; a memória utilizada por padrão é a quantidade da memória inicialmente alocada quando uma aplicação .Net é executada. Reduzir o consumo de memória padrão do CoreCLR representa o aumento da eficiência da utilização da memória nos containers sem alterar a configuração padrão do .NET Core.
Com as recentes modificações, o .NET Core 3.0 agora tem suporte Docker resource limits (memória e CPU). O limite de recursos permite controlar quanto de memória ou CPU cada container pode utilizar. Esses limites são descritos em termos de quantidade tanto para memória e CPU (exemplo, 128MB de memória, ou duas CPUs). Quando os limites de memória são definidos, o .NET Core 3.0 altera seu comportamento de acordo: o tamanho do garbage-collector é reduzido em 20MB ou 75% do limite de memória. No caso do limite de CPU, o valor definido no Docker é arredondado para cima para o próximo valor inteiro. Esse valor é o número máximo efetivo de cores de CPU que será usado pelo CoreCLR.
As melhorias também afetam a usabilidade de alto-nível do .NET em containers Docker. Conforme as solicitações da comunidade, a Microsoft adicionou o PowerShell Core como um aplicativo independente disponível nas imagens Docker .NET Core SDK. Além disso, as imagens de container .NET Core estão agora disponíveis por meio do Microsoft Container Registry (MCR). Isso permite utilizar o Microsoft Azure como uma fonte oficial de imagens de container providas pela Microsoft, e como uma rede de distribuição de conteúdos global (CDN) para entregar imagens de contêineres de acordo com a localização geográfica dos usuários.
Enquanto .NET Core é suportado por múltiplas plataformas de distribuição e versão, a lista de distribuição suportadas pelo Docker é muito menor. Até o momento, somente versões específicas do Alpine, Debian, e distribuições do Ubuntu estão sendo suportadas, junto com todas versões do Windows Nano Server. O time do .NET Core está em processo de adicionar suporte para ARM64 e Linux.
Richard Lander, gerente de programa do time de .NET, escreveu em um blog sobre as melhorias:
Nós estamos investindo para fazer o .NET Core um verdadeiro runtime funcionando em container. Nas versões anteriores, nós transformamos o .NET Core amigável para containers. Nós estamos agora fortalecendo o runtime para fazê-lo pronto para uso em container e funcionalmente eficiente em ambientes de pouca memória.
A comunidade .NET recebeu bem as melhorias de performance do framework. Além da publicação no blog, palestrantes da Microsoft e da Docker apresentaram várias seções na DockerCon 2019 relatando o desenvolvimento de .NET utilizando containers. Uma dessas seções focou na conteinerização de aplicações .NET legadas, que é um tema particularmente interessante para companhias com longos anos de história de desenvolvimento utilizando .NET. Essa seção teve como host um representante da Docker, e foi apresentado esforços de companhias recentes para estimular o uso de containers pela indústria e suportando a comunidade de desenvolvedores.
Os esforços da Microsoft parecem estar alinhados com as intenções da Docker, bem como com outras iniciativas de diferentes comunidades desenvolvimento. Outras áreas de produtos da Microsoft estão seguindos as mesmas tendências: no início deste mês a Microsoft liberou uma nova extensão para desenvolvimento remoto com o VS Code, que permite o desenvolvimento contínuo usando containeres remotos em conjunto com uma instância local do VS Code.