IRONSOFTWAREHOME

Implantação em um contêiner e Docker Hub - Curso de criação de uma API de exemplo em C#

Deploying to a Container and Docker Hub - Building a Sample API in C# Course

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.

Criando e compreendendo a API de exemplo

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.

Configurando o Docker localmente

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.

Publicando em um contêiner localmente

Tim navega até a pasta do projeto da API e executa o seguinte comando na linha de comando:

dotnet publish -p:PublishProfile=DefaultContainer

Este 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).

Executando a imagem com o Docker

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.

Criando um repositório no Docker Hub

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

Configurando o projeto para o Docker Hub

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: 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.

Publicando no Docker Hub

Tim executa o mesmo comando de publicação novamente:

dotnet publish -p:PublishProfile=DefaultContainer

Inicialmente, 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.

Obtendo a imagem do Docker Hub

Tim demonstra como extrair a imagem de qualquer máquina com o Docker instalado:

docker pull timcorey/thesampleapi:latest

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:latest

Isso mapeia uma porta de host aleatória para a porta interna 8080.

Criando uma nova versão da imagem

Para demonstrar o controle de versões, Tim edita o arquivo .csproj para:

<ContainerImageTags>1.0.1;latest</ContainerImageTags>

Em seguida, ele executa novamente o comando de publicação:

dotnet publish -p:PublishProfile=DefaultContainer

Agora 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.

Utilizando a imagem Docker para desenvolvimento local

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

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 image

Ele explica que isso o torna perfeito para desenvolvimento e testes sob demanda, sem sobrecarregar sua máquina local.

Qual o próximo passo?

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.

Conclusão: Da compilação local à implantação na nuvem

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.

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!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.