Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
23m 51s
Implantar uma aplicação .NET Core em um contêiner Docker é uma habilidade crucial para desenvolvedores modernos. Os contêineres oferecem infraestrutura imutável, fácil distribuição e ambientes de execução leves. Neste guia detalhado, vamos mostrar como implantar uma API de exemplo em um contêiner Docker e, em seguida, publicá-la no Docker Hub, seguindo os passos demonstrados no tutorial em vídeo abrangente de Tim Corey: " Implantando em um Contêiner e no Docker Hub – Criando uma API de Exemplo em C# ".
Vamos explorar o processo passo a passo, referenciando horários específicos para facilitar o acompanhamento. Este guia inclui o uso de comandos como .NET publish, o comando docker run, e termos como imagem base, imagem de runtime e imagem de contêiner — todos conceitos importantes para implantar uma aplicação .NET usando Docker.
No início do vídeo, Tim destaca a utilidade de um aplicativo de exemplo ao aprender desenvolvimento web. O aplicativo inclui endpoints como /courses e /health, simula problemas do mundo real, como verificações de integridade degradadas, e foi projetado para ser executado tanto em sua máquina local quanto em um servidor remoto.
Este é um aplicativo .NET Core (mais precisamente, uma API ASP.NET Core mínima) que pode ser executado e testado facilmente por meio de contêineres Docker.
Tim verifica se o Docker está instalado em sua máquina local, usando o Docker Desktop. Ele observa que é possível publicar diretamente no Docker Hub sem o Docker instalado localmente, mas, para fins de demonstração, ele começa com a implantação local.
Ele mostra duas imagens Docker pré-instaladas:
Uma ferramenta pessoal para legendas
A imagem base oficial do ASP.NET Core da Microsoft: mcr.microsoft.com/dotnet/aspnet
Essa imagem base tem cerca de 328 MB e serve como alicerce para nossa imagem de contêiner. A Microsoft hospeda essas imagens em seu MCR (Microsoft Container Registry) e oferece suporte tanto a contêineres Linux quanto a contêineres Windows. Para este projeto, o Linux é o sistema operacional alvo.
Tim navega até a pasta do projeto da API e executa o seguinte comando na linha de comando:
dotnet publish -p:PublishProfile=DefaultContainerdotnet publish -p:PublishProfile=DefaultContainerEste comando utiliza o suporte integrado a contêineres no .NET 8 e .NET 9, eliminando a necessidade de um Dockerfile. O processo de publicação seleciona uma imagem de tempo de execução adequada e cria uma imagem de contêiner autocontida.
Eis o que acontece nos bastidores:
O arquivo de projeto (.csproj) é usado para construir a API.
As dependências são restauradas usando o comando .NET restore
O resultado é direcionado para uma pasta de publicação.
Um arquivo DLL é gerado e incorporado ao contêiner.
A imagem resultante tem cerca de 333 MB (apenas 5 MB a mais que a imagem base).
Após a criação da imagem, Tim utiliza o Docker Desktop para executar o contêiner. Internamente, o aplicativo escuta na porta 8080. Tim mapeia essa porta para uma porta de host aleatória, inserindo 0 na configuração da porta.
O contêiner é iniciado com um nome aleatório (por exemplo, elegant_hoover) e o navegador é aberto exibindo uma API funcional com "Olá Mundo" como resposta padrão.
Ao navegar até /courses e /health, Tim confirma que a API está funcionando. O endpoint de verificação de integridade é útil para simular um cenário de ambiente de produção.
Para visualizar os contêineres em execução, você pode usar o comando docker ps na CLI. Tim exclui o contêiner e a imagem em execução em seguida para demonstrar a limpeza.
Em seguida, Tim passa para a parte de implantação na nuvem. Ele acessa sua conta do Docker Hub e cria um repositório público chamado thesampleapi.
É aqui que a imagem Docker será enviada para que outros possam baixá-la usando:
docker pull timcorey/thesampleapi:latest' There is no direct equivalent of a Docker CLI command in VB.NET code.
' This command is run directly in the terminal or command prompt.Dentro do arquivo de projeto da API, Tim adiciona metadados para definir onde e como publicar a imagem Docker. Ele adiciona o seguinte bloco de código:
<ContainerRegistry>docker.io</ContainerRegistry>
<ContainerRepository>timcorey/thesampleapi</ContainerRepository>
<ContainerImageTags>1.0.0;latest</ContainerImageTags><ContainerRegistry>docker.io</ContainerRegistry>
<ContainerRepository>timcorey/thesampleapi</ContainerRepository>
<ContainerImageTags>1.0.0;latest</ContainerImageTags>ContainerRegistry: Especifica o Docker Hub como o registro de destino.
ContainerRepository: O caminho para o repositório do Docker Hub.
ContainerImageTags: Marca a imagem para controle de versão e a versão mais recente.
Isso prepara a imagem para um fluxo de construção em várias etapas no futuro, embora Tim esteja mantendo as coisas simples por enquanto.
Tim executa o mesmo comando de publicação novamente:
dotnet publish -p:PublishProfile=DefaultContainerdotnet publish -p:PublishProfile=DefaultContainerInicialmente, o envio falha porque ele se esqueceu de salvar o arquivo .csproj. Após salvar e executar o comando novamente, a imagem é enviada com sucesso para o Docker Hub.
No Docker Hub, as tags "latest" e "1.0.0" aparecem no repositório thesampleapi. Essas etiquetas permitem flexibilidade na seleção de versões específicas.
Tim demonstra como extrair a imagem de qualquer máquina com o Docker instalado:
docker pull timcorey/thesampleapi:latest' There is no direct equivalent of a Docker CLI command in VB.NET code.
' This command is run directly in the terminal or command prompt.Graças ao cache de camadas do Docker, a imagem é baixada rapidamente, já que a maior parte dela já existe na imagem base.
Para executar a imagem:
docker run -p 0:8080 timcorey/thesampleapi:latestdocker run -p 0:8080 timcorey/thesampleapi:latestIsso mapeia uma porta de host aleatória para a porta interna 8080.
Para demonstrar o controle de versões, Tim edita o arquivo .csproj para:
<ContainerImageTags>1.0.1;latest</ContainerImageTags><ContainerImageTags>1.0.1;latest</ContainerImageTags>Em seguida, ele executa novamente o comando de publicação:
dotnet publish -p:PublishProfile=DefaultContainerdotnet publish -p:PublishProfile=DefaultContainerAgora o repositório do Docker Hub exibe três tags:
1.0.0
1.0.1
mais recente (agora apontando para 1.0.1)
Tim explica que, apesar das múltiplas tags, o Docker não armazena camadas duplicadas, otimizando o uso do disco por meio de camadas distintas.
Tim enfatiza que, uma vez que a imagem esteja no Docker Hub, você pode executá-la a qualquer momento em qualquer máquina usando:
docker pull timcorey/thesampleapi:latest' There is no direct equivalent of a Docker CLI command in VB.NET code.
' This command is run directly in the terminal or command prompt.Em seguida, use o comando docker run para iniciar o serviço. Quando terminar, faça a limpeza com:
docker ps # Get container ID
docker stop <id> # Stop the container
docker rm <id> # Remove the container
docker rmi <image> # Remove the imagedocker ps ' Get container ID
docker stop <id> ' Stop the container
docker rm <id> ' Remove the container
docker rmi <image> ' Remove the imageEle explica que isso o torna perfeito para desenvolvimento e testes sob demanda, sem sobrecarregar sua máquina local.
Tim conclui mencionando o próximo passo: implantar essa mesma API em um Servidor Virtual Privado (VPS). Ele vai explicar passo a passo como mapear um domínio e configurar o contêiner para que seja acessível publicamente.
Utilizando o guia em vídeo de Tim Corey, nós:
Construí uma API .NET Core usando .NET new console
Usei .NET restore e .NET publish para construir e implantar
Criei um contêiner Docker sem precisar de um Dockerfile de exemplo.
A imagem do contêiner foi carregada no Docker Hub.
Baixei e executei o contêiner usando o comando docker run.
Gerenciamento de tags e camadas de imagem distintas
Preparado para ambientes de produção usando imagens versionadas
Este fluxo de trabalho, centrado em Docker e .NET, é ideal para construir aplicações escaláveis, testáveis e compartilháveis.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy