Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 9 deste artigo.
Advertência
Esta versão do ASP.NET Core não é mais suportada. Para obter mais informações, consulte a Política de suporte do .NET e do .NET Core. Para a versão atual, consulte a versão .NET 9 deste artigo.
Importante
Estas informações referem-se a um produto de pré-lançamento que pode ser substancialmente modificado antes de ser lançado comercialmente. A Microsoft não oferece garantias, expressas ou implícitas, em relação às informações fornecidas aqui.
Para a versão atual, consulte a versão .NET 9 deste artigo.
Este artigo mostra como executar um aplicativo ASP.NET Core em contêineres do Docker.
O Windows Home Edition não suporta Hyper-V e Hyper-V é necessário para o Docker.
Consulte Containerize a .NET app with dotnet publish para obter informações sobre como colocar em contêiner um aplicativo .NET com dotnet publish
.
ASP.NET imagens principais do Docker
Para este tutorial, baixe um aplicativo de exemplo do ASP.NET Core e execute-o em contêineres do Docker. O exemplo funciona com contêineres Linux e Windows.
O Dockerfile de exemplo usa o recurso de compilação de vários estágios do Docker para criar e executar em contêineres diferentes. Os contêineres de compilação e execução são criados a partir de imagens fornecidas no Docker Hub pela Microsoft:
dotnet/sdk
O exemplo usa essa imagem para criar o aplicativo. A imagem contém o SDK do .NET, que inclui as ferramentas de linha de comando (CLI). A imagem está otimizada para o desenvolvimento local, a depuração e os testes unitários. As ferramentas instaladas para desenvolvimento e compilação tornam a imagem relativamente grande.
dotnet/aspnet
O exemplo usa essa imagem para executar o aplicativo. A imagem contém o tempo de execução e as bibliotecas do ASP.NET Core e é otimizada para executar aplicativos em produção. Projetada para velocidade de implantação e inicialização do aplicativo, a imagem é relativamente pequena, portanto, o desempenho da rede do Registro do Docker para o host do Docker é otimizado. Somente os binários e o conteúdo necessários para executar um aplicativo são copiados para o contêiner. Os conteúdos estão prontos para serem executados, permitindo o tempo mais rápido desde
docker run
até à inicialização da aplicação. A compilação de código dinâmico não é necessária no modelo do Docker.
Pré-requisitos
Cliente Docker 18.03 ou posterior
Descarregar a aplicação de exemplo
Baixe o exemplo clonando o repositório .NET Docker:
git clone https://github.com/dotnet/dotnet-docker
Executar a aplicação localmente
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o seguinte comando para criar e executar o aplicativo localmente:
dotnet run
Vá para
http://localhost:<port>
em um navegador para testar o aplicativo.Pressione Ctrl+C no prompt de comando para parar o aplicativo.
Executar em um contêiner Linux ou Windows
Para executar em um contêiner Linux, clique com o botão direito do mouse no ícone do cliente Docker da bandeja do sistema e selecione alternar para contêineres Linux.
Para executar em um contêiner do Windows, clique com o botão direito do mouse no ícone do cliente Docker da Bandeja do Sistema e selecione alternar para contêineres do Windows.
Navegue até a pasta Dockerfile em dotnet-docker/samples/aspnetapp.
Execute os seguintes comandos para criar e executar o exemplo no Docker:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
Os
build
argumentos do comando:- Nomeie a imagem aspnetapp.
- Procure o Dockerfile na pasta atual (o ponto no final).
Os argumentos do comando executar:
- Aloque um pseudo-TTY e mantenha-o aberto mesmo que não esteja anexado. (O mesmo efeito que
--interactive --tty
.) - Remova automaticamente o recipiente quando ele sair.
- Mapeie
<port>
na máquina local para a porta 8080 no contêiner. - Nomeie o contêiner aspnetcore_sample.
- Especifique a imagem aspnetapp.
Vá para
http://localhost:<port>
em um navegador para testar o aplicativo.
Criar e implantar manualmente
Em alguns cenários, talvez você queira implantar um aplicativo em um contêiner copiando seus ativos necessários em tempo de execução. Esta seção mostra como implantar manualmente.
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o comando dotnet publishing :
dotnet publish -c Release -o published
Os argumentos do comando:
- Crie o aplicativo no modo de lançamento (o padrão é o modo de depuração).
- Crie os ativos na pasta publicada .
Execute o aplicativo.
Windows
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Navegue para
http://localhost:<port>
para ver a página inicial.
Para usar o aplicativo publicado manualmente em um contêiner do Docker, crie um novo Dockerfile e use o docker build .
comando para criar uma imagem.
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Para ver a nova imagem, use o docker images
comando.
O Dockerfile
Aqui está o Dockerfile usado pelo docker build
comando que você executou anteriormente. Ele usa dotnet publish
da mesma forma que você fez nesta seção para criar e implantar.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:10.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:10.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. Quando o docker build
comando cria uma imagem, ele usa um cache interno. Se os *.csproj
arquivos não foram alterados desde a última execução do docker build
comando, o dotnet restore
comando não precisará ser executado novamente. Em vez disso, o cache interno para a camada correspondente dotnet restore
é reutilizado. Para obter mais informações, consulte Práticas recomendadas para escrever Dockerfiles.
Recursos adicionais
- Containerize um aplicativo .NET com dotnet publish
- Comando de compilação do Docker
- Comando de execução do Docker
- ASP.NET Core exemplo do Docker (O exemplo utilizado neste tutorial.)
- Configurar o ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga
- Trabalhando com o Visual Studio Docker Tools
- Depuração com código do Visual Studio
- GC usando Docker e pequenos contêineres
- System.IO.IOException: O limite de usuário configurado (128) no número de instâncias inotify foi atingido
- Atualizações de imagens do Docker
Próximos passos
O repositório Git que contém o aplicativo de exemplo também inclui documentação. Para obter uma visão geral dos recursos disponíveis no repositório, consulte o arquivo LEIA-ME. Em particular, saiba como implementar HTTPS:
ASP.NET imagens principais do Docker
Para este tutorial, baixe um aplicativo de exemplo do ASP.NET Core e execute-o em contêineres do Docker. O exemplo funciona com contêineres Linux e Windows.
O Dockerfile de exemplo usa o recurso de compilação de vários estágios do Docker para criar e executar em contêineres diferentes. Os contêineres de compilação e execução são criados a partir de imagens fornecidas no Docker Hub pela Microsoft:
dotnet/sdk
O exemplo usa essa imagem para criar o aplicativo. A imagem contém o SDK do .NET, que inclui as ferramentas de linha de comando (CLI). A imagem está otimizada para o desenvolvimento local, a depuração e os testes unitários. As ferramentas instaladas para desenvolvimento e compilação tornam a imagem relativamente grande.
dotnet/aspnet
O exemplo usa essa imagem para executar o aplicativo. A imagem contém o tempo de execução e as bibliotecas do ASP.NET Core e é otimizada para executar aplicativos em produção. Projetada para velocidade de implantação e inicialização do aplicativo, a imagem é relativamente pequena, portanto, o desempenho da rede do Registro do Docker para o host do Docker é otimizado. Somente os binários e o conteúdo necessários para executar um aplicativo são copiados para o contêiner. Os conteúdos estão prontos para serem executados, permitindo o tempo mais rápido desde
docker run
até à inicialização da aplicação. A compilação de código dinâmico não é necessária no modelo do Docker.
Pré-requisitos
Cliente Docker 18.03 ou posterior
Descarregar a aplicação de exemplo
Baixe o exemplo clonando o repositório .NET Docker:
git clone https://github.com/dotnet/dotnet-docker
Executar a aplicação localmente
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o seguinte comando para criar e executar o aplicativo localmente:
dotnet run
Vá para
http://localhost:<port>
em um navegador para testar o aplicativo.Pressione Ctrl+C no prompt de comando para parar o aplicativo.
Executar em um contêiner Linux ou Windows
Para executar em um contêiner Linux, clique com o botão direito do mouse no ícone do cliente Docker da bandeja do sistema e selecione alternar para contêineres Linux.
Para executar em um contêiner do Windows, clique com o botão direito do mouse no ícone do cliente Docker da Bandeja do Sistema e selecione alternar para contêineres do Windows.
Navegue até a pasta Dockerfile em dotnet-docker/samples/aspnetapp.
Execute os seguintes comandos para criar e executar o exemplo no Docker:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
Os
build
argumentos do comando:- Nomeie a imagem aspnetapp.
- Procure o Dockerfile na pasta atual (o ponto no final).
Os argumentos do comando executar:
- Aloque um pseudo-TTY e mantenha-o aberto mesmo que não esteja anexado. (O mesmo efeito que
--interactive --tty
.) - Remova automaticamente o recipiente quando ele sair.
- Mapeie
<port>
na máquina local para a porta 8080 no contêiner. - Nomeie o contêiner aspnetcore_sample.
- Especifique a imagem aspnetapp.
Vá para
http://localhost:<port>
em um navegador para testar o aplicativo.
Criar e implantar manualmente
Em alguns cenários, talvez você queira implantar um aplicativo em um contêiner copiando seus ativos necessários em tempo de execução. Esta seção mostra como implantar manualmente.
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o comando dotnet publishing :
dotnet publish -c Release -o published
Os argumentos do comando:
- Crie o aplicativo no modo de lançamento (o padrão é o modo de depuração).
- Crie os ativos na pasta publicada .
Execute o aplicativo.
Windows
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Navegue para
http://localhost:<port>
para ver a página inicial.
Para usar o aplicativo publicado manualmente em um contêiner do Docker, crie um novo Dockerfile e use o docker build .
comando para criar uma imagem.
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Para ver a nova imagem, use o docker images
comando.
O Dockerfile
Aqui está o Dockerfile usado pelo docker build
comando que você executou anteriormente. Ele usa dotnet publish
da mesma forma que você fez nesta seção para criar e implantar.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:9.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:9.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. Quando o docker build
comando cria uma imagem, ele usa um cache interno. Se os *.csproj
arquivos não tiverem sido alterados desde a última execução do docker build
comando, o dotnet restore
comando não precisará ser executado novamente. Em vez disso, o cache interno para a camada correspondente dotnet restore
é reutilizado. Para obter mais informações, consulte Práticas recomendadas para escrever Dockerfiles.
Recursos adicionais
- Containerize um aplicativo .NET com dotnet publish
- Comando de compilação do Docker
- Comando de execução do Docker
- ASP.NET Core exemplo do Docker (O exemplo utilizado neste tutorial.)
- Configurar o ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga
- Trabalhando com o Visual Studio Docker Tools
- Depuração com código do Visual Studio
- GC usando Docker e pequenos contêineres
- System.IO.IOException: O limite de usuário configurado (128) no número de instâncias inotify foi atingido
- Atualizações de imagens do Docker
Próximos passos
O repositório Git que contém o aplicativo de exemplo também inclui documentação. Para obter uma visão geral dos recursos disponíveis no repositório, consulte o arquivo LEIA-ME. Em particular, saiba como implementar HTTPS:
ASP.NET imagens principais do Docker
Para este tutorial, baixe um aplicativo de exemplo do ASP.NET Core e execute-o em contêineres do Docker. O exemplo funciona com contêineres Linux e Windows.
O Dockerfile de exemplo usa o recurso de compilação de vários estágios do Docker para criar e executar em contêineres diferentes. Os contêineres de compilação e execução são criados a partir de imagens fornecidas no Docker Hub pela Microsoft:
dotnet/sdk
O exemplo usa essa imagem para criar o aplicativo. A imagem contém o SDK do .NET, que inclui as ferramentas de linha de comando (CLI). A imagem está otimizada para o desenvolvimento local, a depuração e os testes unitários. As ferramentas instaladas para desenvolvimento e compilação tornam a imagem relativamente grande.
dotnet/aspnet
O exemplo usa essa imagem para executar o aplicativo. A imagem contém o tempo de execução e as bibliotecas do ASP.NET Core e é otimizada para executar aplicativos em produção. Projetada para velocidade de implantação e inicialização do aplicativo, a imagem é relativamente pequena, portanto, o desempenho da rede do Registro do Docker para o host do Docker é otimizado. Somente os binários e o conteúdo necessários para executar um aplicativo são copiados para o contêiner. Os conteúdos estão prontos para serem executados, permitindo o tempo mais rápido desde
docker run
até à inicialização da aplicação. A compilação de código dinâmico não é necessária no modelo do Docker.
Pré-requisitos
Cliente Docker 18.03 ou posterior
Descarregar a aplicação de exemplo
Baixe o exemplo clonando o repositório .NET Docker:
git clone https://github.com/dotnet/dotnet-docker
Executar a aplicação localmente
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o seguinte comando para criar e executar o aplicativo localmente:
dotnet run
Vá para
http://localhost:<port>
em um navegador para testar o aplicativo.Pressione Ctrl+C no prompt de comando para parar o aplicativo.
Executar em um contêiner Linux ou Windows
Para executar em um contêiner Linux, clique com o botão direito do mouse no ícone do cliente Docker da bandeja do sistema e selecione alternar para contêineres Linux.
Para executar em um contêiner do Windows, clique com o botão direito do mouse no ícone do cliente Docker da Bandeja do Sistema e selecione alternar para contêineres do Windows.
Navegue até a pasta Dockerfile em dotnet-docker/samples/aspnetapp.
Execute os seguintes comandos para criar e executar o exemplo no Docker:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
Os
build
argumentos do comando:- Nomeie a imagem aspnetapp.
- Procure o Dockerfile na pasta atual (o ponto no final).
Os argumentos do comando executar:
- Aloque um pseudo-TTY e mantenha-o aberto mesmo que não esteja anexado. (O mesmo efeito que
--interactive --tty
.) - Remova automaticamente o recipiente quando ele sair.
- Mapeie
<port>
na máquina local para a porta 8080 no contêiner. - Nomeie o contêiner aspnetcore_sample.
- Especifique a imagem aspnetapp.
Vá para
http://localhost:<port>
em um navegador para testar o aplicativo.
Criar e implantar manualmente
Em alguns cenários, talvez você queira implantar um aplicativo em um contêiner copiando seus ativos necessários em tempo de execução. Esta seção mostra como implantar manualmente.
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o comando dotnet publishing :
dotnet publish -c Release -o published
Os argumentos do comando:
- Crie o aplicativo no modo de lançamento (o padrão é o modo de depuração).
- Crie os ativos na pasta publicada .
Execute o aplicativo.
Windows
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Navegue para
http://localhost:<port>
para ver a página inicial.
Para usar o aplicativo publicado manualmente em um contêiner do Docker, crie um novo Dockerfile e use o docker build .
comando para criar uma imagem.
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Para ver a nova imagem, use o docker images
comando.
O Dockerfile
Aqui está o Dockerfile usado pelo docker build
comando que você executou anteriormente. Ele usa dotnet publish
da mesma forma que você fez nesta seção para criar e implantar.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:8.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:8.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. Quando o docker build
comando cria uma imagem, ele usa um cache interno. Se os *.csproj
arquivos não tiverem sido alterados desde a última execução do docker build
comando, o dotnet restore
comando não precisará ser executado novamente. Em vez disso, o cache interno para a camada correspondente dotnet restore
é reutilizado. Para obter mais informações, consulte Práticas recomendadas para escrever Dockerfiles.
Recursos adicionais
- Containerize um aplicativo .NET com dotnet publish
- Comando de compilação do Docker
- Comando de execução do Docker
- ASP.NET Core exemplo do Docker (O exemplo utilizado neste tutorial.)
- Configurar o ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga
- Trabalhando com o Visual Studio Docker Tools
- Depuração com código do Visual Studio
- GC usando Docker e pequenos contêineres
- System.IO.IOException: O limite de usuário configurado (128) no número de instâncias inotify foi atingido
- Atualizações de imagens do Docker
Próximos passos
O repositório Git que contém o aplicativo de exemplo também inclui documentação. Para obter uma visão geral dos recursos disponíveis no repositório, consulte o arquivo LEIA-ME. Em particular, saiba como implementar HTTPS:
ASP.NET imagens principais do Docker
Para este tutorial, baixe um aplicativo de exemplo do ASP.NET Core e execute-o em contêineres do Docker. O exemplo funciona com contêineres Linux e Windows.
O Dockerfile de exemplo usa o recurso de compilação de vários estágios do Docker para criar e executar em contêineres diferentes. Os contêineres de compilação e execução são criados a partir de imagens fornecidas no Docker Hub pela Microsoft:
dotnet/sdk
O exemplo usa essa imagem para criar o aplicativo. A imagem contém o SDK do .NET, que inclui as ferramentas de linha de comando (CLI). A imagem está otimizada para o desenvolvimento local, a depuração e os testes unitários. As ferramentas instaladas para desenvolvimento e compilação tornam a imagem relativamente grande.
dotnet/aspnet
O exemplo usa essa imagem para executar o aplicativo. A imagem contém o tempo de execução e as bibliotecas do ASP.NET Core e é otimizada para executar aplicativos em produção. Projetada para velocidade de implantação e inicialização do aplicativo, a imagem é relativamente pequena, portanto, o desempenho da rede do Registro do Docker para o host do Docker é otimizado. Somente os binários e o conteúdo necessários para executar um aplicativo são copiados para o contêiner. Os conteúdos estão prontos para serem executados, permitindo o tempo mais rápido desde
docker run
até à inicialização da aplicação. A compilação de código dinâmico não é necessária no modelo do Docker.
Pré-requisitos
Cliente Docker 18.03 ou posterior
Descarregar a aplicação de exemplo
Baixe o exemplo clonando o repositório .NET Docker:
git clone https://github.com/dotnet/dotnet-docker
Executar a aplicação localmente
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o seguinte comando para criar e executar o aplicativo localmente:
dotnet run
Vá para
http://localhost:5000
em um navegador para testar o aplicativo.Pressione Ctrl+C no prompt de comando para parar o aplicativo.
Executar em um contêiner Linux ou Windows
Para executar em um contêiner Linux, clique com o botão direito do mouse no ícone do cliente Docker da bandeja do sistema e selecione alternar para contêineres Linux.
Para executar em um contêiner do Windows, clique com o botão direito do mouse no ícone do cliente Docker da Bandeja do Sistema e selecione alternar para contêineres do Windows.
Navegue até a pasta Dockerfile em dotnet-docker/samples/aspnetapp.
Execute os seguintes comandos para criar e executar o exemplo no Docker:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
Os
build
argumentos do comando:- Nomeie a imagem aspnetapp.
- Procure o Dockerfile na pasta atual (o ponto no final).
Os argumentos do comando executar:
- Aloque um pseudo-TTY e mantenha-o aberto mesmo que não esteja anexado. (O mesmo efeito que
--interactive --tty
.) - Remova automaticamente o recipiente quando ele sair.
- Mapeie a porta 5000 na máquina local para a porta 80 no contêiner.
- Nomeie o contêiner aspnetcore_sample.
- Especifique a imagem aspnetapp.
Vá para
http://localhost:5000
em um navegador para testar o aplicativo.
Criar e implantar manualmente
Em alguns cenários, talvez você queira implantar um aplicativo em um contêiner copiando seus ativos necessários em tempo de execução. Esta seção mostra como implantar manualmente.
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o comando dotnet publishing :
dotnet publish -c Release -o published
Os argumentos do comando:
- Crie o aplicativo no modo de lançamento (o padrão é o modo de depuração).
- Crie os ativos na pasta publicada .
Execute o aplicativo.
Windows
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Navegue para
http://localhost:5000
para ver a página inicial.
Para usar o aplicativo publicado manualmente em um contêiner do Docker, crie um novo Dockerfile e use o docker build .
comando para criar uma imagem.
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Para ver a nova imagem, use o docker images
comando.
O Dockerfile
Aqui está o Dockerfile usado pelo docker build
comando que você executou anteriormente. Ele usa dotnet publish
da mesma forma que você fez nesta seção para criar e implantar.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:7.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:7.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. Quando o docker build
comando cria uma imagem, ele usa um cache interno. Se os *.csproj
arquivos não tiverem sido alterados desde a última execução do docker build
comando, o dotnet restore
comando não precisará ser executado novamente. Em vez disso, o cache interno para a camada correspondente dotnet restore
é reutilizado. Para obter mais informações, consulte Práticas recomendadas para escrever Dockerfiles.
Recursos adicionais
- Containerize um aplicativo .NET com dotnet publish
- Comando de compilação do Docker
- Comando de execução do Docker
- ASP.NET Core exemplo do Docker (O exemplo utilizado neste tutorial.)
- Configurar o ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga
- Trabalhando com o Visual Studio Docker Tools
- Depuração com código do Visual Studio
- GC usando Docker e pequenos contêineres
- System.IO.IOException: O limite de usuário configurado (128) no número de instâncias inotify foi atingido
- Atualizações de imagens do Docker
Próximos passos
O repositório Git que contém o aplicativo de exemplo também inclui documentação. Para obter uma visão geral dos recursos disponíveis no repositório, consulte o arquivo LEIA-ME. Em particular, saiba como implementar HTTPS:
ASP.NET imagens principais do Docker
Para este tutorial, baixe um aplicativo de exemplo do ASP.NET Core e execute-o em contêineres do Docker. O exemplo funciona com contêineres Linux e Windows.
O Dockerfile de exemplo usa o recurso de compilação de vários estágios do Docker para criar e executar em contêineres diferentes. Os contêineres de compilação e execução são criados a partir de imagens fornecidas no Docker Hub pela Microsoft:
dotnet/sdk
O exemplo usa essa imagem para criar o aplicativo. A imagem contém o SDK do .NET, que inclui as ferramentas de linha de comando (CLI). A imagem está otimizada para o desenvolvimento local, a depuração e os testes unitários. As ferramentas instaladas para desenvolvimento e compilação tornam a imagem relativamente grande.
dotnet/core/sdk
O exemplo usa essa imagem para criar o aplicativo. A imagem contém o SDK do .NET Core, que inclui as Ferramentas de Linha de Comando (CLI). A imagem está otimizada para o desenvolvimento local, a depuração e os testes unitários. As ferramentas instaladas para desenvolvimento e compilação tornam a imagem relativamente grande.
dotnet/aspnet
O exemplo usa essa imagem para executar o aplicativo. A imagem contém o tempo de execução e as bibliotecas do ASP.NET Core e é otimizada para executar aplicativos em produção. Projetada para velocidade de implantação e inicialização do aplicativo, a imagem é relativamente pequena, portanto, o desempenho da rede do Registro do Docker para o host do Docker é otimizado. Somente os binários e o conteúdo necessários para executar um aplicativo são copiados para o contêiner. Os conteúdos estão prontos para serem executados, permitindo o tempo mais rápido desde
docker run
até à inicialização da aplicação. A compilação de código dinâmico não é necessária no modelo do Docker.
dotnet/core/aspnet
O exemplo usa essa imagem para executar o aplicativo. A imagem contém o tempo de execução e as bibliotecas do ASP.NET Core e é otimizada para executar aplicativos em produção. Projetada para velocidade de implantação e inicialização do aplicativo, a imagem é relativamente pequena, portanto, o desempenho da rede do Registro do Docker para o host do Docker é otimizado. Somente os binários e o conteúdo necessários para executar um aplicativo são copiados para o contêiner. Os conteúdos estão prontos para serem executados, permitindo o tempo mais rápido desde
docker run
até à inicialização da aplicação. A compilação de código dinâmico não é necessária no modelo do Docker.
Pré-requisitos
Descarregar a aplicação de exemplo
Baixe o exemplo clonando o repositório .NET Docker:
git clone https://github.com/dotnet/dotnet-docker
Executar a aplicação localmente
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o seguinte comando para criar e executar o aplicativo localmente:
dotnet run
Vá para
http://localhost:5000
em um navegador para testar o aplicativo.Pressione Ctrl+C no prompt de comando para parar o aplicativo.
Executar em um contêiner Linux ou Windows
Para executar em um contêiner Linux, clique com o botão direito do mouse no ícone do cliente Docker da bandeja do sistema e selecione alternar para contêineres Linux.
Para executar em um contêiner do Windows, clique com o botão direito do mouse no ícone do cliente Docker da Bandeja do Sistema e selecione alternar para contêineres do Windows.
Navegue até a pasta Dockerfile em dotnet-docker/samples/aspnetapp.
Execute os seguintes comandos para criar e executar o exemplo no Docker:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
Os
build
argumentos do comando:- Nomeie a imagem aspnetapp.
- Procure o Dockerfile na pasta atual (o ponto no final).
Os argumentos do comando executar:
- Aloque um pseudo-TTY e mantenha-o aberto mesmo que não esteja anexado. (O mesmo efeito que
--interactive --tty
.) - Remova automaticamente o recipiente quando ele sair.
- Mapeie a porta 5000 na máquina local para a porta 80 no contêiner.
- Nomeie o contêiner aspnetcore_sample.
- Especifique a imagem aspnetapp.
Vá para
http://localhost:5000
em um navegador para testar o aplicativo.
Criar e implantar manualmente
Em alguns cenários, talvez você queira implantar um aplicativo em um contêiner copiando seus ativos necessários em tempo de execução. Esta seção mostra como implantar manualmente.
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o comando dotnet publishing :
dotnet publish -c Release -o published
Os argumentos do comando:
- Crie o aplicativo no modo de lançamento (o padrão é o modo de depuração).
- Crie os ativos na pasta publicada .
Execute o aplicativo.
Windows
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Navegue para
http://localhost:5000
para ver a página inicial.
Para usar o aplicativo publicado manualmente em um contêiner do Docker, crie um novo Dockerfile e use o docker build .
comando para criar uma imagem.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Para ver a nova imagem, use o docker images
comando.
O Dockerfile
Aqui está o Dockerfile usado pelo docker build
comando que você executou anteriormente. Ele usa dotnet publish
da mesma forma que você fez nesta seção para criar e implantar.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:6.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:6.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Para ver a nova imagem, use o docker images
comando.
O Dockerfile
Aqui está o Dockerfile usado pelo docker build
comando que você executou anteriormente. Ele usa dotnet publish
da mesma forma que você fez nesta seção para criar e implantar.
# 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. Quando o docker build
comando cria uma imagem, ele usa um cache interno. Se os *.csproj
arquivos não tiverem sido alterados desde a última execução do docker build
comando, o dotnet restore
comando não precisará ser executado novamente. Em vez disso, o cache interno para a camada correspondente dotnet restore
é reutilizado. Para obter mais informações, consulte Práticas recomendadas para escrever Dockerfiles.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
O Dockerfile
Aqui está o Dockerfile usado pelo docker build
comando que você executou anteriormente. Ele usa dotnet publish
da mesma forma que você fez nesta seção para criar e implantar.
FROM 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 out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Como observado no Dockerfile anterior, os *.csproj
arquivos são copiados e restaurados como camadas distintas. Quando o docker build
comando cria uma imagem, ele usa um cache interno. Se os *.csproj
arquivos não tiverem sido alterados desde a última execução do docker build
comando, o dotnet restore
comando não precisará ser executado novamente. Em vez disso, o cache interno para a camada correspondente dotnet restore
é reutilizado. Para obter mais informações, consulte Práticas recomendadas para escrever Dockerfiles.
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
O Dockerfile
Aqui está o Dockerfile usado pelo docker build
comando que você executou anteriormente. Ele usa dotnet publish
da mesma forma que você fez nesta seção para criar e implantar.
FROM 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 out
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
No Dockerfile anterior, os *.csproj
arquivos são copiados e restaurados como camadas distintas. Quando o docker build
comando cria uma imagem, ele usa um cache interno. Se os *.csproj
arquivos não tiverem sido alterados desde a última execução do docker build
comando, o dotnet restore
comando não precisará ser executado novamente. Em vez disso, o cache interno para a camada correspondente dotnet restore
é reutilizado. Para obter mais informações, consulte Práticas recomendadas para escrever Dockerfiles.
Recursos adicionais
- Containerize um aplicativo .NET com dotnet publish
- Comando de compilação do Docker
- Comando de execução do Docker
- ASP.NET Core exemplo do Docker (O exemplo utilizado neste tutorial.)
- Configurar o ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga
- Trabalhando com o Visual Studio Docker Tools
- Depuração com código do Visual Studio
- GC usando Docker e pequenos contêineres
- System.IO.IOException: O limite de usuário configurado (128) no número de instâncias inotify foi atingido
Próximos passos
O repositório Git que contém o aplicativo de exemplo também inclui documentação. Para obter uma visão geral dos recursos disponíveis no repositório, consulte o arquivo LEIA-ME. Em particular, saiba como implementar HTTPS: