Depurando Contêineres .NET com Ferramentas do Visual Studio Code Docker
As ferramentas do Docker para Visual Studio Code lançaram a versão 1.26.0, trazendo suporte integrado para criar e depurar imagens de contêiner usando o…

As ferramentas do Docker para Visual Studio Code lançaram a versão 1.26.0, trazendo suporte integrado para criar e depurar imagens de contêiner usando o .NET SDK.
Depuração do Docker no VS Code
As ferramentas do Docker para Visual Studio Code são um conjunto de ferramentas que tornam mais fácil para os desenvolvedores começarem a usar contêineres. Ele fornece scaffolding de Dockerfiles, integrações para construir, executar e depurar os contêineres gerados a partir desses Dockerfiles e fornece acesso no editor a várias outras ferramentas relacionadas ao Docker e ao contêiner. Você pode aprender mais sobre essas ferramentas no Visual Studio Marketplace .
Anteriormente, as ferramentas do Docker ofereciam a capacidade de estruturar um Dockerfile para um projeto .NET. Este Dockerfile se parecia com isto:
FROM mcr.microsoft.com/dotnet/runtime:8.0-preview AS base
WORKDIR /app
USER app
FROM mcr.microsoft.com/dotnet/sdk:8.0-preview AS build
ARG configuration=Release
WORKDIR /src
COPY ["MinimalApiSharp.csproj", "./"]
RUN dotnet restore "MinimalApiSharp.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "MinimalApiSharp.csproj" -c $configuration -o /app/build
FROM build AS publish
ARG configuration=Release
RUN dotnet publish "MinimalApiSharp.csproj" -c $configuration -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MinimalApiSharp.dll"]
Essa é uma ótima base para criar uma imagem de contêiner eficiente, mas há muito o que entender imediatamente. Os usuários são imediatamente confrontados com a compreensão de Dockerfiles de vários estágios, argumentos de compilação de contêiner e garantia de que os caminhos se alinham entre os estágios para as saídas de compilação e publicação.
Construindo contêineres com o .NET SDK
A partir do .NET 7, o .NET SDK teve a capacidade de criar imagens de contêiner facilmente por meio do dotnet publish. Com um único PackageReference (ou nenhum pacote se você estiver usando 7.0.300 ou SDKs posteriores!), um único comando resulta em uma imagem de contêiner funcional para seu aplicativo. Ele possui padrões seguros prontos para uso e permite que os usuários personalizem quase todos os aspectos do contêiner gerado.dotnet publish -p PublishProfile=DefaultContainer
No entanto, integrar esses contêineres gerados às ferramentas era uma lacuna. Esta nova versão das ferramentas do Docker para Visual Studio Code preenche essa lacuna perfeitamente – tornando trivial a depuração de seus aplicativos conteinerizados por meio do mecanismo de configuração de inicialização no Visual Studio Code.
Juntando tudo
Vamos dar uma olhada no que é necessário para reunir as ferramentas SDK e Docker no VSCode.
Primeiro, crie um novo projeto da Web usando o .NET SDK e abra-o no Visual Studio Code. Estarei usando o .NET 8 Preveiw 6 SDK aqui.
> dotnet new web -n MyContainerizedApp
The template "ASP.NET Core Empty" was created successfully.
Processing post-creation actions...
Restoring D:\Code\Scratch\MyContainerizedApp\MyContainerizedApp.csproj:
Restore complete (1.0s)
Build succeeded in 1.4s
Restore succeeded.
> cd MyContainerizedApp
> code .
Depois que o editor for iniciado, você poderá pressionar F5(ou qualquer combinação de teclas que você vinculou ao comando) e obter um menu de seleção muito parecido com o abaixo: workbench.action.debug.start
O item principal a ser procurado neste menu é o método de inicialização. Esse método de inicialização criará seu aplicativo em um contêiner e iniciará automaticamente esse contêiner com as ferramentas de depuração anexadas! Se você selecioná-lo neste menu, verá outra decisão importante: Docker: Debug in Container

É aqui que aparece a nova integração com o .NET SDK. Se você selecionar aqui, criará o contêiner com o Docker de acordo com um Dockerfile verificado em seu repositório, mas se selecionar a nova opção, as ferramentas integradas de conteinerização no .NET SDK serão usadas para criar seu contêiner, então o Docker será usado para executar e depurar esse contêiner. Use a DockerfileUse .NET SDK
Assim que você escolher a opção, deverá ver o ferramental construindo o container. Ele aparecerá no terminal de tarefas (normalmente na parte inferior da janela do editor) e será mais ou menos assim: Use .NET SDK
* Executing task: dotnet-container-sdk: debug
> dotnet publish --os "linux" --arch "x64" -p: PublishProfile=Defau1tContainer --configuration "Debug" -p:ContainerImageTag=dev
<
MSBui1d version 17.7.0+5785ed5c2 for .NET
Determining projects to restore...
Restored d:\Code\Scratch\MyContainerizedApp\MyContainerizedApp.csproj (in 2.03 sec).
C:\Progran Files\dotnet\sdk\8.0.100-preview.6.23330.14\Sdks\microsoft.NET.sdk\targets\microsoft.NET.Runtimeldentifierlnference.
targets(314,5): message NETSDK1057: You are using a preview version of .NET.
See: https://aka.ms/dotnet-support-policy [d:\Code\Scratch\MyContainerizedApp\MyContainerizedApp.csproj]
MyContainerizedApp -> d:\Code\Scratch\MyContainerizedApp\bin\Debug\net8.0\linux-x64\MyContainerizedApp.dll
MyContainerizedApp -> d:\Code\Scratch\MyContainerizedApp\bin\Debug\net8.0\linux-x64\publish\
Building image 'mycontainerizedapp' with tags dev on top of base image mcr.microsoft.com/dotnet/aspnet:8.0.0-preview.6
A saída do terminal aqui mostra algumas coisas interessantes – o comando dotnet publish usado para criar o contêiner, bem como a saída do MSBuild compartilhando mais sobre como o contêiner do aplicativo está sendo criado.
Após um breve momento enquanto o contêiner está sendo criado, a ferramenta VSCode Docker iniciará o contêiner gerado e, adicionalmente, abrirá uma janela do navegador apontando para o aplicativo recém-iniciado:

Isso foi muito fácil, você não acha? A partir daqui, você pode interagir com o contêiner em execução usando todos os recursos existentes das ferramentas do Visual Studio Code Docker.
Trecho extraído do Dev Blogs microsoft, créditos ao autor original Chet Husk Tradução e adaptação Gleyson Areas da Silva