O Docker é uma das maravilhas da Tecnologia da Informação que surgiram que realmente vieram para auxiliar nosso trabalho no dia a dia com este enorme universo de plataformas e sistemas. Desenvolver software nos dias atuais sem desfrutar dos benefícios que esta ferramenta nos traz é praticamente impossível e imaginar. Me recordo em meados de
O Docker é uma das maravilhas da Tecnologia da Informação que surgiram que realmente vieram para auxiliar nosso trabalho no dia a dia com este enorme universo de plataformas e sistemas.
Desenvolver software nos dias atuais sem desfrutar dos benefícios que esta ferramenta nos traz é praticamente impossível e imaginar.
Me recordo em meados de 2007 quando comecei a ter contato com virtualização e maquinas virtuais, quando você realmente queria testar algo era um verdadeiro desafio.
Ainda que na época, mesmo que mais primitivamente, tinhamos alguns softwares que faziam este papel, como é o caso do VMWare e o VirtualBox.
Vou falar um pouco sobre o que é o Docker
Para você que não conhece, o Docker é uma plataforma de software que simplifica o processo de desenvolvimento, implantação e execução de aplicativos em contêineres.
Contêineres são ambientes isolados que contêm tudo o que um aplicativo precisa para ser executado, incluindo código, bibliotecas, ferramentas e configurações.
O Docker utiliza uma tecnologia chamada de “containerização”, que permite empacotar um aplicativo junto com suas dependências em um contêiner.
Já imagina o porquê desta plataforma ter ganhado tanta atenção e notoriedade dentro da área, já que ele, ao contrário das máquinas virtuais que utilizam recursos físicos da máquina, o Docker consegue utilizar apenas uma parte do recursos, sendo muito mais leve.
Agora, falando no .NET Core, como criar contêiners sem precisar criar um Dockerfile em seu projeto?
Agora é possível criar este contêiners sem mesmo escrever um arquivo Dockerfile, isto mesmo! Isto ocorre a partir do .NET Core 7, ao qual traz junto do MS Builder esta feature.
Basta apenas algumas configurações – que irei demonstrar a seguir – para que o seu contêiner Docker seja iniciado sem qualquer dificuldade.
Primeiramente, vamos abrir um projeto .NET Core 7 como exemplo. Veja a estrutura:

Note que não criei com o template padrão utilizando o Docker, que vem instalado um Dockerfile por padrão. Se você tiver ele em seu projeto, pode removê-lo.
A partir do .NET 7, a Microsoft introduziu um novo recurso que permite criar um projeto .NET em uma imagem de contêiner sem adicionar um arquivo Dockerfile ao seu projeto.
Isso é bom porque significa que você não precisa se preocupar em manter o arquivo Dockerfile, armazená-lo no controle de origem, vê-lo em seu projeto ou pensar nisso de outra forma.
Por outro lado, não é ideal porque as ferramentas de infraestrutura nativas da nuvem que você pode usar com imagens, como Docker ou docker-compose, dependem do conteúdo de um Dockerfile bem formado. O que isso significa, na prática, é que talvez você precise continuar mantendo um arquivo Dockerfile em seu projeto.
Para cenários em que você deseja criar um único projeto de microsserviço, web ou API web, construí-lo em uma imagem de contêiner e enviar a imagem para o Azure ou Kubernetes, esse novo recurso .NET é útil.
Pré-requisitos e restrições
Assim como acontece com a funcionalidade existente do .NET Core até hoje, sua estação de trabalho de desenvolvimento deve ter o Docker Desktop instalado e em execução. As ferramentas atuais suportam apenas imagens de contêiner Linux.
Não considero isso uma limitação séria, pois minha opinião sobre os contêineres do Windows é que eles existem para oferecer suporte a software legado. Presumo que qualquer código do lado do servidor que eu criar usando o .NET moderno acabará sendo executado em um ambiente Linux.
Este novo recurso requer o .NET 7, portanto, você deve ter o SDK do .NET 7 instalado.
Se você estiver usando o Visual Studio, o Visual Studio 2022 será necessário para funcionar com o .NET 7. Essa nova ferramenta ainda não funciona no Visual Studio, mas você ainda pode usar o Visual Studio como editor, desde que esteja disposto a usar o Visual Studio. CLI para executar o comando dotnetPublish.
Se você já estiver usando a CLI com algo como o Visual Studio Code, seu processo de construção existente não será afetado em grande parte.
Adicionando a referência NuGet Microsoft.NET.Build.Containers
Se estiver usando o Visual Studio, clique com o botão direito do mouse no nó Dependências do projeto no Solution Explorer e escolha a opção para gerenciar referências do NuGet. Adicione uma referência ao pacote Microsoft.NET.Build.Containers.
Se você não estiver usando o Visual Studio, altere seu diretório para a pasta webtest e execute o seguinte comando CLI:
dotnet add package Microsoft.NET.Build.Containers
O resultado é que seu projeto agora faz referência ao pacote NuGet necessário para dar suporte à criação de uma imagem de contêiner diretamente da CLI dotnet.
Se você quiser, pode adicionar o mesmo utilizando o gerenciador de pacotes pelo projeto ou solução:

Crie a imagem do contêiner
Para construir a imagem do contêiner você deve usar a CLI. Mude o diretório para o local do arquivo csproj e execute o seguinte comando (para projetos da web):
dotnet publish --os linux --arch x64 -p:PublishProfile=DefaultContainer -c Release
Vamos executar o comando abrindo uma janela console no próprio projeto ou se preferir, pode abrir o PowerShell ou qualquer prompt de comando, como abaixo:

Se listar as imagens, vai perceber também a mesma criada. Veja:

Note que, com a imagem criada, você consegue agora fazer o que quiser com ela, inclusive criar um contêiner para sua aplicação.
Simples assim! É .NET e gostamos.
Leave a Comment
Your email address will not be published. Required fields are marked with *