Novidades do .NET Core 3.0: melhorias no suporte a Docker
Como é do conhecimento de muitos, a Microsoft tem se esforçado para reduzir o tamanho das imagens Docker do .NET Core a cada novo release da plataforma. Com o .NET Core 3.0 isto não está sendo diferente, com uma redução bastante significativa na imagem corresponde ao SDK.
Podemos observar este fato na imagem a seguir, em que é possível estabelecer um comparativo entre as imagens do Preview 5 do .NET Core 3.0 e as versões correspondentes do .NET Core 2.2:
- No .NET Core 2.2 as imagens normal e Alpine do SDK contavam com 1.73 GB e 1.47 GB, respectivamente. Com o .NET Core 3.0 o tamanho caiu para 723 MB;
- A imagem do runtime do ASP.NET Core estava com 260 MB na versão 2.2. Com o Preview 5 da versão 3.0 também houve redução, com a imagem correspondente chegando a 196 MB (um pouco mais que a versão Alpine do ASP.NET Core 2.2, que possuía 168 MB).
As imagens do Preview 5 do .NET Core 3.0 podem ser baixadas através do seguintes comandos:
docker pull mcr.microsoft.com/dotnet/core/sdk:3.0.100-preview5
docker pull mcr.microsoft.com/dotnet/core/aspnet:3.0.0-preview5
Temos ainda outro destaque envolvendo a integração entre Docker e .NET Core 3.0: o PowerShell Core foi incorporado às imagens SDK a partir do Preview 4!
E qual a vantagem prática disto? Em sua versão cross-platform (Core) o PowerShell traz funcionalidades de automação e configuração que podem ser extremamente úteis no build de uma imagem.
Neste post apresentarei um exemplo bem simples dessa nova capacidade, tomando como base o projeto detalhado no seguinte artigo (API REST com contador de acessos):
ASP.NET Core 2.2 + Docker: visão geral e exemplos
Na listagem a seguir temos o Dockerfile para o build da imagem:
- Estão sendo utilizadas as imagens do Preview 5 para o SDK na linha 1 (mcr.microsoft.com/dotnet/core/sdk) e o runtime do ASP.NET Core na linha 15 (mcr.microsoft.com/dotnet/core/aspnet);
- Na linha 8 temos um exemplo de execução do PowerShell Core (utilitário pwsh.exe), com uma chamada ao comando Write-Host para a impressão em tela de uma mensagem durante o build.
Para este exemplo fiz uso também de um arquivo docker-compose.yml, com instruções para a geração da imagem apicontagem-3–0-preview5 e de um container para testes da mesma (na porta 10000):
Ao executar o build da imagem uma mensagem será exibida em tela (além do próprio step envolvendo o uso do PowerShell):
Concluído este procedimento o comando docker images apicontagem-3–0-preview5 indicará que a imagem da API REST baseada no ASP.NET Core 3.0 foi criada com sucesso: