Novidades do .NET 8: melhorias envolvendo containers em um breve resumo
Na listagem a seguir temos um exemplo de Dockerfile para um projeto ASP.NET Core criado com o .NET 8 (uma API REST, neste caso específico), em que foram utilizadas as imagens mcr.microsoft.com/dotnet/sdk (SDK na versão 8.0.101 para build) e mcr.microsoft.com/dotnet/aspnet (runtime na versão 8.0.1 para execução da aplicação conteinerizada):
Este projeto foi disponibilizado no seguinte repositório do GitHub:
https://github.com/renatogroffe/ASPNETCore8-MinimalAPIs-AppInsights-LoadTests_ContagemAcessos
Caso achem útil esta solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!
Estruturalmente falando, trata-se de um exemplo equivalente a diversos outros que já abordei neste blog e também no meu GitHub. E como é de conhecimento geral, até o .NET 7 a porta 80 era o default utilizado por um container de uma aplicação baseada em ASP.NET Core.
Com o .NET 8 a porta 8080 passa a ser o novo default. Assim poderíamos criar um container mapeando sua execução na porta 5000 da seguinte maneira (a imagem renatogroffe/apicontagem-dotnet8-minimal-appinsights-simulacaofalhas foi disponibilizada de forma pública no Docker Hub):
docker run -p 5000:8080 renatogroffe/apicontagem-dotnet8-minimal-appinsights-simulacaofalhas:2
Na próxima imagem podemos observar este container em execução, com logs gerados a partir do recebimento de requisições HTTP do tipo GET no endpoint /contador:
Outras novidades que merecem ser destacadas envolvendo containers no .NET 8 são:
- A nova distribuição Linux default para as imagens se baseia no Debian 12 (versão também conhecida como Bookworm);
- Há agora o suporte a chiseled containers, com imagens Ubuntu contendo apenas o mínimo necessário para execução de aplicações (a partir da remoção de inúmeros packages de sistema). Consequências diretas disto são também imagens muito menores, além de se reduzir a superfície de ataques em soluções containerizadas;
- Temos ainda a possibilidade de habilitar um usuário non-root para nossos containers, capacidade esta exigida ao se trabalhar com chiseled containers. Esta alternativa também aumenta a segurança ao empregarmos containerização, com um usuário default para nossos containers com diversas permissões especiais desativadas.
Buscarei em posts futuros abordar em maiores detalhes outras novidades relacionadas à implementação de aplicações containerizadas com o .NET 8.