Imagens do Docker para o ASP.NET CoreDocker images for ASP.NET Core
- 04/01/2021
- o
Neste artigo
- Imagens do ASP.NET Core Docker
- Pré-requisitos
- Baixar o aplicativo de exemplo
- Executar o aplicativo localmente
- Executar em um contêiner do Linux
- Executar em um contêiner do Windows
- Criar e implantar manualmente
- Recursos adicionais
- Próximas etapas
Este tutorial mostra como executar um aplicativo ASP.NET Core em contêineres do Docker.This tutorial shows how to run an ASP.NET Core app in Docker containers.
Neste tutorial, você:In this tutorial, you:
- Saiba mais sobre ASP.NET Core imagens do DockerLearn about ASP.NET Core Docker images
- Baixar um aplicativo de exemplo do ASP.NET CoreDownload an ASP.NET Core sample app
- Executar o aplicativo de exemplo localmenteRun the sample app locally
- Executou o aplicativo de exemplo em contêineres do LinuxRun the sample app in Linux containers
- Executar o aplicativo de exemplo em contêineres do WindowsRun the sample app in Windows containers
- Criar e implantar manualmenteBuild and deploy manually
Imagens do ASP.NET Core DockerASP.NET Core Docker images
Para este tutorial, você deve baixar um aplicativo de exemplo ASP.NET Core e executá-lo em contêineres do Docker.For this tutorial, you download an ASP.NET Core sample app and run it in Docker containers. O exemplo funciona com contêineres do Linux e do Windows.The sample works with both Linux and Windows containers.
O exemplo de Dockerfile usa o recurso de build de vários estágios do Docker para compilar e executar em contêineres diferentes.The sample Dockerfile uses the Docker multi-stage build feature to build and run in different containers. Os contêineres de build e execução são criados a partir de imagens que são fornecidas pela Microsoft no Hub do Docker:The build and run containers are created from images that are provided in Docker Hub by Microsoft:
dotnet/sdk
O exemplo usa essa imagem para compilar o aplicativo.The sample uses this image for building the app. A imagem contém o SDK do .NET, que inclui as ferramentas de linha de comando (CLI).The image contains the .NET SDK, which includes the Command Line Tools (CLI). A imagem é otimizada para desenvolvimento local, depuração e teste de unidade.The image is optimized for local development, debugging, and unit testing. As ferramentas instaladas para desenvolvimento e compilação tornam a imagem relativamente grande.The tools installed for development and compilation make the image relatively large.
dotnet/core/sdk
O exemplo usa essa imagem para compilar o aplicativo.The sample uses this image for building the app. A imagem contém o SDK do .NET Core, que inclui as ferramentas de linha de comando (CLI).The image contains the .NET Core SDK, which includes the Command Line Tools (CLI). A imagem é otimizada para desenvolvimento local, depuração e teste de unidade.The image is optimized for local development, debugging, and unit testing. As ferramentas instaladas para desenvolvimento e compilação tornam a imagem relativamente grande.The tools installed for development and compilation make the image relatively large.
dotnet/aspnet
dotnet/core/aspnet
O exemplo usa essa imagem para executar o aplicativo.The sample uses this image for running the app. A imagem contém o runtime do ASP.NET Core e as bibliotecas e é otimizada para executar aplicativos em produção.The image contains the ASP.NET Core runtime and libraries and is optimized for running apps in production. Desenvolvida para acelerar a implantação e a inicialização do aplicativo, a imagem é relativamente pequena, portanto, o desempenho da rede no registro do Docker para o host do Docker é otimizado.Designed for speed of deployment and app startup, the image is relatively small, so network performance from Docker Registry to Docker host is optimized. Somente os binários e o conteúdo necessários para executar o aplicativo são copiados para o contêiner.Only the binaries and content needed to run an app are copied to the container. O conteúdo está pronto para ser executado, permitindo mais rapidez do docker run
para a inicialização do aplicativo.The contents are ready to run, enabling the fastest time from docker run
to app startup. A compilação de código dinâmico não é necessária no modelo do Docker.Dynamic code compilation isn't needed in the Docker model.
Pré-requisitosPrerequisites
Cliente do Docker 18.03 ou posteriorDocker client 18.03 or later
- Distribuições LinuxLinux distributions
- macOSmacOS
- WindowsWindows
Baixar o aplicativo de exemploDownload the sample app
Baixe o exemplo clonando o repositório do Docker do .net:Download the sample by cloning the .NET Docker repository:
Console Copiargit clone https://github.com/dotnet/dotnet-docker
Executar o aplicativo localmenteRun the app locally
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.Navigate to the project folder at dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o seguinte comando para compilar e executar o aplicativo localmente:Run the following command to build and run the app locally:
CLI do .NET Core Copiardotnet run
Vá para
http://localhost:5000
em um navegador para testar o aplicativo.Go tohttp://localhost:5000
in a browser to test the app.Pressione Ctrl+C no prompt de comando para interromper o aplicativo.Press Ctrl+C at the command prompt to stop the app.
Executar em um contêiner do LinuxRun in a Linux container
No cliente do Docker, alterne para contêineres do Linux.In the Docker client, switch to Linux containers.
Navegue até a pasta do Dockerfile em dotnet-docker/samples/aspnetapp.Navigate to the Dockerfile folder at dotnet-docker/samples/aspnetapp.
Execute os seguintes comandos para compilar e executar a amostra no Docker:Run the following commands to build and run the sample in Docker:
Console Copiardocker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
Os argumentos de comando
build
:Thebuild
command arguments:- Dê o nome aspnetapp para a imagem.Name the image aspnetapp.
- Procure o Dockerfile na pasta atual (o ponto no final).Look for the Dockerfile in the current folder (the period at the end).
Os argumentos de comando de execução:The run command arguments:
- Aloque um pseudo-TTY e mantenha-o aberto, mesmo se não estiver anexado.Allocate a pseudo-TTY and keep it open even if not attached. (Mesmo efeito de
--interactive --tty
).(Same effect as--interactive --tty
.) - Remova automaticamente o contêiner quando ele é encerrado.Automatically remove the container when it exits.
- Mapeie a porta 5000 no computador local para a porta 80 no contêiner.Map port 5000 on the local machine to port 80 in the container.
- Dê o nome aspnetcore_sample ao contêiner.Name the container aspnetcore_sample.
- Especifique a imagem aspnetapp.Specify the aspnetapp image.
Vá para
http://localhost:5000
em um navegador para testar o aplicativo.Go tohttp://localhost:5000
in a browser to test the app.
Executar em um contêiner do WindowsRun in a Windows container
- No cliente do Docker, alterne para contêineres do Windows.In the Docker client, switch to Windows containers.
Navegue até a pasta do arquivo do docker em dotnet-docker/samples/aspnetapp
.Navigate to the docker file folder at dotnet-docker/samples/aspnetapp
.
Execute os seguintes comandos para compilar e executar a amostra no Docker:Run the following commands to build and run the sample in Docker:
Console Copiardocker build -t aspnetapp . docker run -it --rm --name aspnetcore_sample aspnetapp
Para os contêineres do Windows, você precisará do endereço IP do contêiner (navegar até
http://localhost:5000
não funcionará):For Windows containers, you need the IP address of the container (browsing tohttp://localhost:5000
won't work):Abra outro prompt de comando.Open up another command prompt.
Execute
docker ps
para ver os contêineres em execução.Rundocker ps
to see the running containers. Verifique se o contêiner "aspnetcore_sample" está lá.Verify that the "aspnetcore_sample" container is there.Execute
docker exec aspnetcore_sample ipconfig
para exibir o endereço IP do contêiner.Rundocker exec aspnetcore_sample ipconfig
to display the IP address of the container. A saída do comando é semelhante a este exemplo:The output from the command looks like this example:Console CopiarCopie o endereço IPv4 (por exemplo, 172.29.245.43) do contêiner e cole na barra de endereços do navegador para testar o aplicativo.Copy the container IPv4 address (for example, 172.29.245.43) and paste into the browser address bar to test the app.
Criar e implantar manualmenteBuild and deploy manually
Em alguns cenários, talvez você queira implantar um aplicativo em um contêiner copiando seus ativos que são necessários no tempo de execução.In some scenarios, you might want to deploy an app to a container by copying its assets that are needed at run time. Esta seção mostra como realizar a implantação manual.This section shows how to deploy manually.
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.Navigate to the project folder at dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o comando dotnet publish:Run the dotnet publish command:
CLI do .NET Core Copiardotnet publish -c Release -o published
Os argumentos do comando:The command arguments:
- Compile o aplicativo no modo de liberação (o padrão é o modo de depuração).Build the app in release mode (the default is debug mode).
- Crie os ativos na pasta publicada .Create the assets in the published folder.
Execute o aplicativo.Run the app.
Windows:Windows:
CLI do .NET Core Copiardotnet published\aspnetapp.dll
Linux:Linux:
CLI do .NET Core Copiardotnet published/aspnetapp.dll
Navegue até
http://localhost:5000
para ver a página inicial.Browse tohttp://localhost:5000
to see the home page.
Para usar o aplicativo publicado manualmente dentro de um contêiner do Docker, crie um novo Dockerfile e use o
docker build .
comando para criar o contêiner.To use the manually published app within a Docker container, create a new Dockerfile and use thedocker build .
command to build the container.Dockerfile CopiarFROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime WORKDIR /app COPY published/aspnetapp.dll ./ ENTRYPOINT ["dotnet", "aspnetapp.dll"]
O DockerfileThe Dockerfile
Aqui está o Dockerfile usado pelo
docker build
comando que você executou anteriormente.Here's the Dockerfile used by thedocker build
command you ran earlier. Ele usadotnet publish
da mesma maneira que foi feito nesta seção para realizar a criação e implantação.It usesdotnet publish
the same way you did in this section to build and deploy.Dockerfile Copiar# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /source# copy csproj and restore as distinct layers
COPY .sln .
COPY aspnetapp/.csproj ./aspnetapp/
RUN dotnet restore# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
No Dockerfile anterior, os
*.csproj
arquivos são copiados e restaurados como camadas distintas.In the preceding Dockerfile, the*.csproj
files are copied and restored as distinct layers. Quando odocker build
comando cria uma imagem, ele usa um cache interno.When thedocker build
command builds an image, it uses a built-in cache. Se os*.csproj
arquivos não foram alterados desde adocker build
última execução do comando, odotnet restore
comando não precisará ser executado novamente.If the*.csproj
files haven't changed since thedocker build
command last ran, thedotnet restore
command doesn't need to run again. Em vez disso, o cache interno para adotnet restore
camada correspondente é reutilizado.Instead, the built-in cache for the correspondingdotnet restore
layer is reused. Para obter mais informações, consulte práticas recomendadas para escrever Dockerfiles.For more information, see Best practices for writing Dockerfiles.Dockerfile CopiarFROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime WORKDIR /app COPY published/aspnetapp.dll ./ ENTRYPOINT ["dotnet", "aspnetapp.dll"]
O DockerfileThe Dockerfile
Aqui está o Dockerfile usado pelo
docker build
comando que você executou anteriormente.Here's the Dockerfile used by thedocker build
command you ran earlier. Ele usadotnet publish
da mesma maneira que foi feito nesta seção para realizar a criação e implantação.It usesdotnet publish
the same way you did in this section to build and deploy.Dockerfile CopiarFROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /app# copy csproj and restore as distinct layers
COPY .sln .
COPY aspnetapp/.csproj ./aspnetapp/
RUN dotnet restore# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o outFROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Conforme observado no Dockerfile anterior, os
*.csproj
arquivos são copiados e restaurados como camadas distintas.As noted in the preceding Dockerfile, the*.csproj
files are copied and restored as distinct layers. Quando odocker build
comando cria uma imagem, ele usa um cache interno.When thedocker build
command builds an image, it uses a built-in cache. Se os*.csproj
arquivos não foram alterados desde adocker build
última execução do comando, odotnet restore
comando não precisará ser executado novamente.If the*.csproj
files haven't changed since thedocker build
command last ran, thedotnet restore
command doesn't need to run again. Em vez disso, o cache interno para adotnet restore
camada correspondente é reutilizado.Instead, the built-in cache for the correspondingdotnet restore
layer is reused. Para obter mais informações, consulte práticas recomendadas para escrever Dockerfiles.For more information, see Best practices for writing Dockerfiles.Dockerfile CopiarFROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime WORKDIR /app COPY published/aspnetapp.dll ./ ENTRYPOINT ["dotnet", "aspnetapp.dll"]
O DockerfileThe Dockerfile
Aqui está o Dockerfile usado pelo
docker build
comando que você executou anteriormente.Here's the Dockerfile used by thedocker build
command you ran earlier. Ele usadotnet publish
da mesma maneira que foi feito nesta seção para realizar a criação e implantação.It usesdotnet publish
the same way you did in this section to build and deploy.Dockerfile CopiarFROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /app# copy csproj and restore as distinct layers
COPY .sln .
COPY aspnetapp/.csproj ./aspnetapp/
RUN dotnet restore# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o outFROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Recursos adicionaisAdditional resources
- Comando de build do DockerDocker build command
- Comando de execução do DockerDocker run command
- Exemplo do Docker do ASP.NET Core (aquele usado neste tutorial).ASP.NET Core Docker sample (The one used in this tutorial.)
- Configurar o ASP.NET Core para trabalhar com servidores proxy e balanceadores de cargaConfigure ASP.NET Core to work with proxy servers and load balancers
- Trabalhar com ferramentas de Docker do Visual StudioWorking with Visual Studio Docker Tools
- Depuração com o Visual Studio CodeDebugging with Visual Studio Code
- GC usando o Docker e contêineres pequenosGC using Docker and small containers
Próximas etapasNext steps
O repositório Git que contém o aplicativo de exemplo também inclui a documentação.The Git repository that contains the sample app also includes documentation. Para obter uma visão geral dos recursos disponíveis no repositório, confira o arquivo Leiame.For an overview of the resources available in the repository, see the README file. Em particular, saiba como implementar o HTTPS:In particular, learn how to implement HTTPS:
Imagens do Docker para o ASP.NET CoreDocker images for ASP.NET Core
Neste artigo
Este tutorial mostra como executar um aplicativo ASP.NET Core em contêineres do Docker.This tutorial shows how to run an ASP.NET Core app in Docker containers.
Neste tutorial, você:In this tutorial, you: