Implantando Aplicações .NET Core em Contêineres Docker

A implantação de aplicações .NET Core utilizando Docker garante consistência entre ambientes de desenvolvimento e produção. Este guia prático aborda o processo de containerização de uma API .NET 5.0 em um ambeinte Linux (CentOS 7), desde a configuração do Dockerfile até a execução do contêiner.

Preparação do Dockerfile

O Visual Studio gera automaticamente um Dockerfile complexo com múltiplos estágios (multi-stage), adequado para compilar o código fonte dentro do contêiner. No entanto, para cenários de integração contínua onde publicamos a aplicação previamente, um Dockerfile simplificado é mais eficiente.

Crie um arquivo Dockerfile na raiz da pasta de publicação (publish) com o seguinte conteúdo. Este arquivo utiliza a imagem de runtime leve e copia os arquivos já compilados:

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS ambiente_runtime
WORKDIR /app
# Copia todos os arquivos do diretório atual para dentro do contêiner
COPY . .
# Expõe a porta 80 para comunicação externa
EXPOSE 80
# Define o ponto de entrada da aplicação
ENTRYPOINT ["dotnet", "MeuProjetoApi.dll"]

Nota: Certifique-se de que o arquivo Dockerfile esteja no mesmo diretório dos arquivos de saída da publicação (.dll, .deps.json, etc.).

Instalação do Docker no CentOS 7

Antes de iniciar, é necessário preparar o servidor. Remova versões antigas do Docker para evitar conflitos:

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

Instale o utilitário yum-utils e configure o repositório oficial (recomenda-se utilizar espelhos locais como o do Aliyun para melhor velocidade de download na China, ou o oficial para outros locais):

sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Atualize o índice de pacotes e instale o Docker Engine:

sudo yum makecache fast
sudo yum install docker-ce docker-ce-cli containerd.io

Inicie o serviço Docker e verifique se está ativo:

sudo systemctl start docker
sudo docker version

Para validar a instalação, execute o contêiner de teste "hello-world":

sudo docker run hello-world

Construindo e Executando a Imagem

Com o ambiente pronto e os arquivos da API publicados no servidor, acesse o diretório da aplicação e construa a imagem Docker. O parâmetro -t nomeia a imagem, e o ponto . indica que o contexto de build é o diretório atual.

cd /caminho/para/pasta_publish
sudo docker build -t api-dotnet:v1 .

Após a construção, execute o contêiner mapeando a porta do host para a porta interna do contêiner. O exemplo abaixo mapeia a porta 9000 do servidor para a porta 80 do contêiner:

sudo docker run -d -p 9000:80 --name instancia_api api-dotnet:v1

Explicação dos parâmetros:

  • -d: Executa o contêiner em segundo plano (detached mode).
  • -p 9000:80: Redireciona o tráfego da porta 9000 do host para a porta 80 do contêiner.
  • --name instancia_api: Atribui um nome customizado ao contêiner.

Para verificar se o contêiner está em execução, utilize:

sudo docker ps -a

Escalar Múltiplas Instâncias

O Docker facilita a execução de múltiplas instâncias da mesma aplicação. Para rodar uma segunda cópia em uma porta diferente, basta alterar o mapeamento de porta e o nome do contêiner:

sudo docker run -d -p 9001:80 --name instancia_api_2 api-dotnet:v1

Agora, a aplicação estará acessível tanto na porta 9000 quanto na 9001.

Tags: Docker .NET Core CentOS Containerização devops

Publicado em 10-26 12:12