Contentorizar uma aplicação .NET Core
Aplica-se a: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016
Este tópico descreve como empacotar um aplicativo .NET de exemplo existente para implantação como um contêiner do Windows, depois de configurar seu ambiente conforme descrito em Introdução: Preparar o Windows para contêinerese executar seu primeiro contêiner conforme descrito em Executar seu primeiro contêiner do Windows.
Você também precisará do sistema de controle de origem Git instalado no seu computador. Para instalá-lo, visite Git.
Clone o código de exemplo do GitHub
Todo o código-fonte de exemplo de contêiner é mantido sob o repositório git Virtualization-Documentation em uma pasta chamada windows-container-samples
.
Abra uma sessão do PowerShell e altere os diretórios para a pasta na qual você deseja armazenar esse repositório. (Outros tipos de janela de prompt de comando também funcionam, mas nossos comandos de exemplo usam o PowerShell.)
Clone o repositório no seu diretório de trabalho atual:
git clone https://github.com/MicrosoftDocs/Virtualization-Documentation.git
Navegue até o diretório de exemplo encontrado em
Virtualization-Documentation\windows-container-samples\asp-net-getting-started
e crie um Dockerfile, usando os comandos a seguir.Um Dockerfile é como um makefile: é uma lista de instruções que indicam ao motor de containers como construir a imagem do container.
# Navigate into the sample directory Set-Location -Path Virtualization-Documentation\windows-container-samples\asp-net-getting-started # Create the Dockerfile for our project New-Item -Name Dockerfile -ItemType file
Escrever o Dockerfile
Abra o Dockerfile que você acabou de criar com qualquer editor de texto que você gosta e, em seguida, adicione o seguinte conteúdo:
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "asp-net-getting-started.dll"]
Vamos dividi-lo linha por linha e explicar o que cada instrução faz.
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build-env
WORKDIR /app
O primeiro grupo de linhas declara a partir de qual imagem base usaremos para construir nosso contêiner em cima. Se o sistema local ainda não tiver essa imagem, o docker tentará buscá-la automaticamente. O mcr.microsoft.com/dotnet/core/sdk:2.1
vem embalado com o SDK do .NET Core 2.1 instalado, portanto, está preparado para criar projetos ASP .NET Core destinados à versão 2.1. A próxima instrução altera o diretório de trabalho em nosso contêiner para ser /app
, para que todos os comandos seguintes a este sejam executados sob este contexto.
COPY *.csproj ./
RUN dotnet restore
Em seguida, essas instruções copiam os arquivos .csproj para o diretório /app
do contêiner build-env
. Depois de copiar este ficheiro, o .NET irá lê-lo para depois procurar todas as dependências e ferramentas necessárias para o nosso projeto.
COPY . ./
RUN dotnet publish -c Release -o out
Depois que o .NET tiver puxado todas as dependências para o contêiner build-env
, a próxima instrução copiará todos os arquivos de origem do projeto para o contêiner. Em seguida, dizemos ao .NET para publicar nosso aplicativo com uma configuração de versão e especificar o caminho de saída.
A compilação deve ser bem-sucedida. Agora temos de construir a imagem final.
Dica
Este guia de início rápido cria um projeto .NET core a partir do código-fonte. Ao criar imagens de contêiner, é uma boa prática incluir apenas carga útil de produção e suas dependências na imagem de contêiner. Não queremos que o SDK do núcleo do .NET seja incluído em nossa imagem final porque só precisamos do tempo de execução do núcleo do .NET, então o dockerfile é gravado para usar um contêiner temporário que é empacotado com o SDK chamado build-env
para criar o aplicativo.
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "asp-net-getting-started.dll"]
Como nosso aplicativo é ASP.NET, especificamos uma imagem com esse tempo de execução incluído. Em seguida, copiamos todos os arquivos do diretório de saída do nosso contêiner temporário para o contêiner final. Configuramos nosso contêiner para ser executado com nosso novo aplicativo como ponto de entrada quando o contêiner for iniciado
Nós escrevemos o dockerfile para realizar uma compilação de vários estágios . Quando o dockerfile é executado, ele usa o contêiner temporário, build-env
, com o SDK do .NET core 2.1 para criar o aplicativo de exemplo e, em seguida, copiar os binários de saída para outro contêiner contendo apenas o tempo de execução do .NET core 2.1 para que minimizemos o tamanho do contêiner final.
Criar e executar o aplicativo
Com o Dockerfile escrito, podemos apontar o Docker para o nosso Dockerfile e dizer-lhe para construir e, em seguida, executar a nossa imagem:
Em uma janela de prompt de comando, navegue até o diretório onde o dockerfile reside e, em seguida, execute o comando docker build para construir o contêiner a partir do Dockerfile.
docker build -t my-asp-app .
Para executar o contêiner recém-construído, execute o comando docker run.
docker run -d -p 5000:80 --name myapp my-asp-app
Vamos dissecar este comando:
-
-d
diz ao Docker para executar o contêiner 'separado', o que significa que nenhum console está conectado ao console dentro do contêiner. O contêiner é executado em segundo plano. -
-p 5000:80
diz ao Docker para mapear a porta 5000 no host para a porta 80 no contêiner. Cada contêiner recebe seu próprio endereço IP. O ASP .NET escuta por padrão na porta 80. O mapeamento de portas nos permite ir para o endereço IP do host na porta mapeada e o Docker encaminhará todo o tráfego para a porta de destino dentro do contêiner. -
--name myapp
diz ao Docker para dar a esse contêiner um nome conveniente para consulta (em vez de ter que procurar o ID do contêiner atribuído em tempo de execução pelo Docker). -
my-asp-app
é a imagem que queremos que o Docker execute. Esta é a imagem do contêiner produzida como culminar do processodocker build
.
-
Abra um navegador da Web e navegue até
http://localhost:5000
para ver seu aplicativo em contêiner.
Próximos passos
A próxima etapa é publicar seu aplicativo Web ASP.NET em contêiner em um registro privado usando o Registro de Contêiner do Azure. Isso permite que você o implante em sua organização.
Quando você chegar à seção onde você enviar sua imagem de contêiner para ode registro , especifique o nome do aplicativo de ASP.NET que você acabou de empacotar (
my-asp-app
) junto com seu registro de contêiner (por exemplo:contoso-container-registry
):docker tag my-asp-app contoso-container-registry.azurecr.io/my-asp-app:v1
Para ver mais exemplos de aplicações e os respetivos dockerfiles associados, veja amostras de contêiner adicionais.
Depois de publicar seu aplicativo no registro de contêiner, a próxima etapa é implantar o aplicativo em um cluster Kubernetes criado com o Serviço Kubernetes do Azure.