Novidades do .NET 7: gerando imagens para containers via dotnet publish
Uma das novidades trazidas pelo .NET 7 envolve o processo de containerização de aplicações: a possibilidade de gerar imagens para a criação de containers sem a necessidade de um arquivo Dockerfile, utilizando para isto o comando dotnet publish.
Na prática esta nova capacidade não implica em se abandonar uso do Dockerfile, sobretudo se considerarmos que este arquivo permite inúmeras customizações via comandos Docker. Profissionais habituados à automação do build de aplicações containerizadas devem inclusive seguir preferindo pela utilização do Dockerfile em tais processos. Ainda assim é uma alternativa interessante para build de novas imagens de uma aplicação, principalmente em cenários mais simples.
Para que consigamos então tirar proveito desta nova funcionalidade será necessário:
- Adicionar o package Microsoft.NET.Build.Containers ao arquivo .csproj correspondente à aplicação que desejamos containerizar;
- Na seção PropertyGroup do arquivo .csproj estarão tags/atributos como ContainerImageName, ContainerImageTag e ContainerBaseImage. Esses itens se referem ao processo de build de uma imagem, correspondendo a configurações como o nome da imagem a ser gerada, a tag/versão prevista e a imagem que servirá como base (para a eventualidade de não estarmos considerando a versão default do .NET SDK naquele ambiente). Maiores informações sobre essas definições podem ser encontradas neste link.
No arquivo .csproj a seguir (de uma API REST criada com .NET 7 + ASP.NET Core) temos um exemplo com esses ajustes, incluindo o uso do package Microsoft.NET.Build.Containers e de 2 atributos (ContainerImageName e ContainerImageTag):
Para o build da imagem contendo esta aplicação utilizei o comando dotnet publish:
dotnet publish --os linux --arch x64 /t:PublishContainer -c Release
Em que se definiu que a imagem foi produzida para ambientes Linux, seguindo uma arquitetura de 64 bits e com configurações de Release.
Ao executar essa instrução via Terminal do Visual Studio Code (e também o comando docker images apicontagemcli) teremos como resultado:
Em podemos observar a geração da imagem apicontagemcli com a tag 1.0.1, assumindo como base a imagem mcr.microsoft.com/dotnet/aspnet:7.0.
Já a próxima imagem mostra esta mesma sequência de comandos executados, com o projeto APIContagem aberto no Visual Studio Code (incluindo configurações no arquivo .csproj) e sequer possuindo um Dockerfile:
Esse exemplo está disponível também no GitHub:
https://github.com/renatogroffe/ASPNETCore7-REST_API-PublishImages_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!
E para concluir, deixo aqui um convite…
Fornecendo um modelo simples e com um mínimo de esforço de implementação, o desenvolvimento de aplicações baseadas em Minimal APIs com o ASPNET Core tem crescido a cada dia.
Acompanhe neste evento ONLINE e GRATUITO do Canal .NET dicas, truques, possibilidades de implementação e novidades envolvedo o uso de Minimal APIs.
Quando: 20/12/2022 (terça) a partir das 21:00 — horário de Brasília
Faça sua inscrição em:
https://bit.ly/live-minimal-apis-aspnetcore-2ed