Novidades do .NET 7: gerando imagens para containers via dotnet publish

Renato Groffe
3 min readDec 12, 2022

--

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:

Clique nesta imagem para visualizar com uma melhor resolução

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:

Clique nesta imagem para visualizar com uma melhor resolução

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

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

No responses yet