Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você 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 do .NET 10 deste artigo.
Aviso
Esta versão do ASP.NET Core não tem mais suporte. 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 do .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 dá suporte ao Hyper-V, e o Hyper-V é necessário para o Docker.
Consulte Containerizar um aplicativo .NET com dotnet publish para informações sobre um aplicativo .NET em contêiner com dotnet publish.
Imagens do ASP.NET Core Docker
Para este tutorial, você deve baixar um aplicativo de exemplo ASP.NET Core e executá-lo em contêineres do Docker. O exemplo funciona com contêineres do Linux e do Windows.
O Dockerfile de exemplo usa o recurso de build de vários estágios do Docker para compilar e executar em contêineres diferentes. 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:
dotnet/sdkO exemplo usa essa imagem para compilar o aplicativo. A imagem contém o SDK do .NET, que inclui as ferramentas de linha de comando (CLI). A imagem é otimizada para desenvolvimento local, depuração e teste de unidade. As ferramentas instaladas para desenvolvimento e compilação tornam a imagem relativamente grande.
dotnet/aspnetO exemplo usa essa imagem para executar o aplicativo. A imagem contém o runtime do ASP.NET Core e as bibliotecas e é otimizada para executar aplicativos em produção. 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. Somente os binários e o conteúdo necessários para executar o aplicativo são copiados para o contêiner. O conteúdo está pronto para ser executado, permitindo mais rapidez do
docker runpara a inicialização do aplicativo. A compilação de código dinâmico não é necessária no modelo do Docker.
Pré-requisitos
Cliente do Docker 18.03 ou posterior
Git
Baixar o aplicativo de exemplo
Baixe o exemplo clonando o repositório do Docker do .NET:
git clone https://github.com/dotnet/dotnet-docker
Executar o aplicativo localmente
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o seguinte comando para compilar e executar o aplicativo localmente:
dotnet runVá para
http://localhost:<port>em um navegador para testar o aplicativo.Pressione Ctrl+C no prompt de comando para interromper o aplicativo.
Executar em um contêiner do Linux ou em um contêiner do Windows
Para ser executado em um contêiner do Linux, clique com o botão direito do mouse no ícone do cliente Docker da Bandeja do Sistema e selecione alternar para contêineres do Linux.
Para ser executado em um contêiner do Windows, clique com o botão direito do mouse no ícone de cliente do 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 compilar e executar a amostra no Docker:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetappOs argumentos de comando
build:- Dê o nome aspnetapp para a imagem.
- Procure o Dockerfile na pasta atual (o ponto no final).
Os argumentos de comando de execução:
- Aloque um pseudo-TTY e mantenha-o aberto, mesmo se não estiver anexado. (Mesmo efeito de
--interactive --tty). - Remova automaticamente o contêiner quando ele é encerrado.
- Mapeie
<port>no computador local para a porta 8080 no contêiner. - Dê o nome aspnetcore_sample ao contêiner.
- 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 os ativos necessários no tempo de execução. Esta seção mostra como realizar a implantação manual.
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o comando dotnet publish:
dotnet publish -c Release -o publishedOs argumentos do comando:
- Compile o aplicativo no modo de versão (o padrão é o modo de depuração).
- Crie os ativos na pasta publicada .
Execute o aplicativo.
Windows:
dotnet published\aspnetapp.dllLinux:
dotnet published/aspnetapp.dll
Navegue até
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 comando docker images.
O Dockerfile
Aqui está o Dockerfile usado pelo docker build comando que você executou anteriormente. Ele usa dotnet publish da mesma maneira que foi feito nesta seção para realizar a criação e implantação.
# 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 comando docker build cria uma imagem, ele usa um cache interno. Se os *.csproj arquivos não forem 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 As práticas recomendadas para escrever Dockerfiles.
Recursos adicionais
- Conteinerizar um aplicativo .NET com o comando dotnet publish
- Comando de build do Docker
- Comando de execução do Docker
- ASP.NET exemplo principal do Docker (aquele usado neste tutorial).)
- Configurar ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga
- Trabalhando com as Ferramentas do Docker do Visual Studio
- Depuração com o Visual Studio Code
- GC usando o Docker e contêineres pequenos
- System.IO.IOException: o limite de usuário configurado (128) no número de instâncias inotify foi atingido
- Atualizações para imagens do Docker
Próximas etapas
O repositório Git que contém o aplicativo de exemplo também inclui a documentação. Para obter uma visão geral dos recursos disponíveis no repositório, consulte o arquivo README. Em particular, saiba como implementar o HTTPS:
Imagens do ASP.NET Core Docker
Para este tutorial, você deve baixar um aplicativo de exemplo ASP.NET Core e executá-lo em contêineres do Docker. O exemplo funciona com contêineres do Linux e do Windows.
O Dockerfile de exemplo usa o recurso de build de vários estágios do Docker para compilar e executar em contêineres diferentes. 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:
dotnet/sdkO exemplo usa essa imagem para compilar o aplicativo. A imagem contém o SDK do .NET, que inclui as ferramentas de linha de comando (CLI). A imagem é otimizada para desenvolvimento local, depuração e teste de unidade. As ferramentas instaladas para desenvolvimento e compilação tornam a imagem relativamente grande.
dotnet/aspnetO exemplo usa essa imagem para executar o aplicativo. A imagem contém o runtime do ASP.NET Core e as bibliotecas e é otimizada para executar aplicativos em produção. 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. Somente os binários e o conteúdo necessários para executar o aplicativo são copiados para o contêiner. O conteúdo está pronto para ser executado, permitindo mais rapidez do
docker runpara a inicialização do aplicativo. A compilação de código dinâmico não é necessária no modelo do Docker.
Pré-requisitos
Cliente do Docker 18.03 ou posterior
Git
Baixar o aplicativo de exemplo
Baixe o exemplo clonando o repositório do Docker do .NET:
git clone https://github.com/dotnet/dotnet-docker
Executar o aplicativo localmente
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o seguinte comando para compilar e executar o aplicativo localmente:
dotnet runVá para
http://localhost:<port>em um navegador para testar o aplicativo.Pressione Ctrl+C no prompt de comando para interromper o aplicativo.
Executar em um contêiner do Linux ou em um contêiner do Windows
Para ser executado em um contêiner do Linux, clique com o botão direito do mouse no ícone do cliente Docker da Bandeja do Sistema e selecione alternar para contêineres do Linux.
Para ser executado em um contêiner do Windows, clique com o botão direito do mouse no ícone de cliente do 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 compilar e executar a amostra no Docker:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetappOs argumentos de comando
build:- Dê o nome aspnetapp para a imagem.
- Procure o Dockerfile na pasta atual (o ponto no final).
Os argumentos de comando de execução:
- Aloque um pseudo-TTY e mantenha-o aberto, mesmo se não estiver anexado. (Mesmo efeito de
--interactive --tty). - Remova automaticamente o contêiner quando ele é encerrado.
- Mapeie
<port>no computador local para a porta 8080 no contêiner. - Dê o nome aspnetcore_sample ao contêiner.
- 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 os ativos necessários no tempo de execução. Esta seção mostra como realizar a implantação manual.
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o comando dotnet publish:
dotnet publish -c Release -o publishedOs argumentos do comando:
- Compile o aplicativo no modo de versão (o padrão é o modo de depuração).
- Crie os ativos na pasta publicada .
Execute o aplicativo.
Windows:
dotnet published\aspnetapp.dllLinux:
dotnet published/aspnetapp.dll
Navegue até
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 comando docker images.
O Dockerfile
Aqui está o Dockerfile usado pelo docker build comando que você executou anteriormente. Ele usa dotnet publish da mesma maneira que foi feito nesta seção para realizar a criação e implantação.
# 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 comando docker build cria uma imagem, ele usa um cache interno. Se os arquivos *.csproj não tiverem sido alterados desde a última execução do comando docker build, o comando dotnet restore 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 As práticas recomendadas para escrever Dockerfiles.
Recursos adicionais
- Conteinerizar um aplicativo .NET com o comando dotnet publish
- Comando de build do Docker
- Comando de execução do Docker
- ASP.NET exemplo principal do Docker (aquele usado neste tutorial).)
- Configurar ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga
- Trabalhando com as Ferramentas do Docker do Visual Studio
- Depuração com o Visual Studio Code
- GC usando o Docker e contêineres pequenos
- System.IO.IOException: o limite de usuário configurado (128) no número de instâncias inotify foi atingido
- Atualizações para imagens do Docker
Próximas etapas
O repositório Git que contém o aplicativo de exemplo também inclui a documentação. Para obter uma visão geral dos recursos disponíveis no repositório, consulte o arquivo README. Em particular, saiba como implementar o HTTPS:
Imagens do ASP.NET Core Docker
Para este tutorial, você deve baixar um aplicativo de exemplo ASP.NET Core e executá-lo em contêineres do Docker. O exemplo funciona com contêineres do Linux e do Windows.
O Dockerfile de exemplo usa o recurso de build de vários estágios do Docker para compilar e executar em contêineres diferentes. 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:
dotnet/sdkO exemplo usa essa imagem para compilar o aplicativo. A imagem contém o SDK do .NET, que inclui as ferramentas de linha de comando (CLI). A imagem é otimizada para desenvolvimento local, depuração e teste de unidade. As ferramentas instaladas para desenvolvimento e compilação tornam a imagem relativamente grande.
dotnet/aspnetO exemplo usa essa imagem para executar o aplicativo. A imagem contém o runtime do ASP.NET Core e as bibliotecas e é otimizada para executar aplicativos em produção. 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. Somente os binários e o conteúdo necessários para executar o aplicativo são copiados para o contêiner. O conteúdo está pronto para ser executado, permitindo mais rapidez do
docker runpara a inicialização do aplicativo. A compilação de código dinâmico não é necessária no modelo do Docker.
Pré-requisitos
Cliente do Docker 18.03 ou posterior
Git
Baixar o aplicativo de exemplo
Baixe o exemplo clonando o repositório do Docker do .NET:
git clone https://github.com/dotnet/dotnet-docker
Executar o aplicativo localmente
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o seguinte comando para compilar e executar o aplicativo localmente:
dotnet runVá para
http://localhost:<port>em um navegador para testar o aplicativo.Pressione Ctrl+C no prompt de comando para interromper o aplicativo.
Executar em um contêiner do Linux ou em um contêiner do Windows
Para ser executado em um contêiner do Linux, clique com o botão direito do mouse no ícone do cliente Docker da Bandeja do Sistema e selecione alternar para contêineres do Linux.
Para ser executado em um contêiner do Windows, clique com o botão direito do mouse no ícone de cliente do 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 compilar e executar a amostra no Docker:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetappOs argumentos de comando
build:- Dê o nome aspnetapp para a imagem.
- Procure o Dockerfile na pasta atual (o ponto no final).
Os argumentos de comando de execução:
- Aloque um pseudo-TTY e mantenha-o aberto, mesmo se não estiver anexado. (Mesmo efeito de
--interactive --tty). - Remova automaticamente o contêiner quando ele é encerrado.
- Mapeie
<port>no computador local para a porta 8080 no contêiner. - Dê o nome aspnetcore_sample ao contêiner.
- 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 os ativos necessários no tempo de execução. Esta seção mostra como realizar a implantação manual.
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o comando dotnet publish:
dotnet publish -c Release -o publishedOs argumentos do comando:
- Compile o aplicativo no modo de versão (o padrão é o modo de depuração).
- Crie os ativos na pasta publicada .
Execute o aplicativo.
Windows:
dotnet published\aspnetapp.dllLinux:
dotnet published/aspnetapp.dll
Navegue até
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 comando docker images.
O Dockerfile
Aqui está o Dockerfile usado pelo docker build comando que você executou anteriormente. Ele usa dotnet publish da mesma maneira que foi feito nesta seção para realizar a criação e implantação.
# 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 comando docker build cria uma imagem, ele usa um cache interno. Se os arquivos *.csproj não tiverem sido alterados desde a última execução do comando docker build, o comando dotnet restore 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 As práticas recomendadas para escrever Dockerfiles.
Recursos adicionais
- Conteinerizar um aplicativo .NET com o comando dotnet publish
- Comando de build do Docker
- Comando de execução do Docker
- ASP.NET exemplo principal do Docker (aquele usado neste tutorial).)
- Configurar ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga
- Trabalhando com as Ferramentas do Docker do Visual Studio
- Depuração com o Visual Studio Code
- GC usando o Docker e contêineres pequenos
- System.IO.IOException: o limite de usuário configurado (128) no número de instâncias inotify foi atingido
- Atualizações para imagens do Docker
Próximas etapas
O repositório Git que contém o aplicativo de exemplo também inclui a documentação. Para obter uma visão geral dos recursos disponíveis no repositório, consulte o arquivo README. Em particular, saiba como implementar o HTTPS:
Imagens do ASP.NET Core Docker
Para este tutorial, você deve baixar um aplicativo de exemplo ASP.NET Core e executá-lo em contêineres do Docker. O exemplo funciona com contêineres do Linux e do Windows.
O Dockerfile de exemplo usa o recurso de build de vários estágios do Docker para compilar e executar em contêineres diferentes. 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:
dotnet/sdkO exemplo usa essa imagem para compilar o aplicativo. A imagem contém o SDK do .NET, que inclui as ferramentas de linha de comando (CLI). A imagem é otimizada para desenvolvimento local, depuração e teste de unidade. As ferramentas instaladas para desenvolvimento e compilação tornam a imagem relativamente grande.
dotnet/aspnetO exemplo usa essa imagem para executar o aplicativo. A imagem contém o runtime do ASP.NET Core e as bibliotecas e é otimizada para executar aplicativos em produção. 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. Somente os binários e o conteúdo necessários para executar o aplicativo são copiados para o contêiner. O conteúdo está pronto para ser executado, permitindo mais rapidez do
docker runpara a inicialização do aplicativo. A compilação de código dinâmico não é necessária no modelo do Docker.
Pré-requisitos
Cliente do Docker 18.03 ou posterior
Git
Baixar o aplicativo de exemplo
Baixe o exemplo clonando o repositório do Docker do .NET:
git clone https://github.com/dotnet/dotnet-docker
Executar o aplicativo localmente
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o seguinte comando para compilar e executar o aplicativo localmente:
dotnet runVá para
http://localhost:5000em um navegador para testar o aplicativo.Pressione Ctrl+C no prompt de comando para interromper o aplicativo.
Executar em um contêiner do Linux ou em um contêiner do Windows
Para ser executado em um contêiner do Linux, clique com o botão direito do mouse no ícone do cliente Docker da Bandeja do Sistema e selecione alternar para contêineres do Linux.
Para ser executado em um contêiner do Windows, clique com o botão direito do mouse no ícone de cliente do 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 compilar e executar a amostra no Docker:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetappOs argumentos de comando
build:- Dê o nome aspnetapp para a imagem.
- Procure o Dockerfile na pasta atual (o ponto no final).
Os argumentos de comando de execução:
- Aloque um pseudo-TTY e mantenha-o aberto, mesmo se não estiver anexado. (Mesmo efeito de
--interactive --tty). - Remova automaticamente o contêiner quando ele é encerrado.
- Mapeie a porta 5000 no computador local para a porta 80 no contêiner.
- Dê o nome aspnetcore_sample ao contêiner.
- Especifique a imagem aspnetapp.
Vá para
http://localhost:5000em 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 os ativos necessários no tempo de execução. Esta seção mostra como realizar a implantação manual.
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o comando dotnet publish:
dotnet publish -c Release -o publishedOs argumentos do comando:
- Compile o aplicativo no modo de versão (o padrão é o modo de depuração).
- Crie os ativos na pasta publicada .
Execute o aplicativo.
Windows:
dotnet published\aspnetapp.dllLinux:
dotnet published/aspnetapp.dll
Navegue até
http://localhost:5000para 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 comando docker images.
O Dockerfile
Aqui está o Dockerfile usado pelo docker build comando que você executou anteriormente. Ele usa dotnet publish da mesma maneira que foi feito nesta seção para realizar a criação e implantação.
# 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 comando docker build cria uma imagem, ele usa um cache interno. Se os arquivos *.csproj não tiverem sido alterados desde a última execução do comando docker build, o comando dotnet restore 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 As práticas recomendadas para escrever Dockerfiles.
Recursos adicionais
- Conteinerizar um aplicativo .NET com o comando dotnet publish
- Comando de build do Docker
- Comando de execução do Docker
- ASP.NET exemplo principal do Docker (aquele usado neste tutorial).)
- Configurar ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga
- Trabalhando com as Ferramentas do Docker do Visual Studio
- Depuração com o Visual Studio Code
- GC usando o Docker e contêineres pequenos
- System.IO.IOException: o limite de usuário configurado (128) no número de instâncias inotify foi atingido
- Atualizações para imagens do Docker
Próximas etapas
O repositório Git que contém o aplicativo de exemplo também inclui a documentação. Para obter uma visão geral dos recursos disponíveis no repositório, consulte o arquivo README. Em particular, saiba como implementar o HTTPS:
Imagens do ASP.NET Core Docker
Para este tutorial, você deve baixar um aplicativo de exemplo ASP.NET Core e executá-lo em contêineres do Docker. O exemplo funciona com contêineres do Linux e do Windows.
O Dockerfile de exemplo usa o recurso de build de vários estágios do Docker para compilar e executar em contêineres diferentes. 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:
dotnet/sdkO exemplo usa essa imagem para compilar o aplicativo. A imagem contém o SDK do .NET, que inclui as ferramentas de linha de comando (CLI). A imagem é otimizada para desenvolvimento local, depuração e teste de unidade. As ferramentas instaladas para desenvolvimento e compilação tornam a imagem relativamente grande.
dotnet/core/sdkO exemplo usa essa imagem para compilar o aplicativo. A imagem contém o SDK do .NET Core, que inclui as ferramentas de linha de comando (CLI). A imagem é otimizada para desenvolvimento local, depuração e teste de unidade. As ferramentas instaladas para desenvolvimento e compilação tornam a imagem relativamente grande.
dotnet/aspnetO exemplo usa essa imagem para executar o aplicativo. A imagem contém o runtime do ASP.NET Core e as bibliotecas e é otimizada para executar aplicativos em produção. 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. Somente os binários e o conteúdo necessários para executar o aplicativo são copiados para o contêiner. O conteúdo está pronto para ser executado, permitindo mais rapidez do
docker runpara a inicialização do aplicativo. A compilação de código dinâmico não é necessária no modelo do Docker.
dotnet/core/aspnetO exemplo usa essa imagem para executar o aplicativo. A imagem contém o runtime do ASP.NET Core e as bibliotecas e é otimizada para executar aplicativos em produção. 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. Somente os binários e o conteúdo necessários para executar o aplicativo são copiados para o contêiner. O conteúdo está pronto para ser executado, permitindo mais rapidez do
docker runpara a inicialização do aplicativo. A compilação de código dinâmico não é necessária no modelo do Docker.
Pré-requisitos
Baixar o aplicativo de exemplo
Baixe o exemplo clonando o repositório do Docker do .NET:
git clone https://github.com/dotnet/dotnet-docker
Executar o aplicativo localmente
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o seguinte comando para compilar e executar o aplicativo localmente:
dotnet runVá para
http://localhost:5000em um navegador para testar o aplicativo.Pressione Ctrl+C no prompt de comando para interromper o aplicativo.
Executar em um contêiner do Linux ou em um contêiner do Windows
Para ser executado em um contêiner do Linux, clique com o botão direito do mouse no ícone do cliente Docker da Bandeja do Sistema e selecione alternar para contêineres do Linux.
Para ser executado em um contêiner do Windows, clique com o botão direito do mouse no ícone de cliente do 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 compilar e executar a amostra no Docker:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetappOs argumentos de comando
build:- Dê o nome aspnetapp para a imagem.
- Procure o Dockerfile na pasta atual (o ponto no final).
Os argumentos de comando de execução:
- Aloque um pseudo-TTY e mantenha-o aberto, mesmo se não estiver anexado. (Mesmo efeito de
--interactive --tty). - Remova automaticamente o contêiner quando ele é encerrado.
- Mapeie a porta 5000 no computador local para a porta 80 no contêiner.
- Dê o nome aspnetcore_sample ao contêiner.
- Especifique a imagem aspnetapp.
Vá para
http://localhost:5000em 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 os ativos necessários no tempo de execução. Esta seção mostra como realizar a implantação manual.
Navegue até a pasta do projeto em dotnet-docker/samples/aspnetapp/aspnetapp.
Execute o comando dotnet publish:
dotnet publish -c Release -o publishedOs argumentos do comando:
- Compile o aplicativo no modo de versão (o padrão é o modo de depuração).
- Crie os ativos na pasta publicada .
Execute o aplicativo.
Windows:
dotnet published\aspnetapp.dllLinux:
dotnet published/aspnetapp.dll
Navegue até
http://localhost:5000para 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 comando docker images.
O Dockerfile
Aqui está o Dockerfile usado pelo docker build comando que você executou anteriormente. Ele usa dotnet publish da mesma maneira que foi feito nesta seção para realizar a criação e implantação.
# 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 comando docker images.
O Dockerfile
Aqui está o Dockerfile usado pelo docker build comando que você executou anteriormente. Ele usa dotnet publish da mesma maneira que foi feito nesta seção para realizar a criação e implantação.
# 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 comando docker build cria uma imagem, ele usa um cache interno. Se os arquivos *.csproj não tiverem sido alterados desde a última execução do comando docker build, o comando dotnet restore 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 As 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 maneira que foi feito nesta seção para realizar a criação e implantação.
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"]
Conforme observado no Dockerfile anterior, os *.csproj arquivos são copiados e restaurados como camadas distintas. Quando o comando docker build cria uma imagem, ele usa um cache interno. Se os arquivos *.csproj não tiverem sido alterados desde a última execução do comando docker build, o comando dotnet restore 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 As 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 maneira que foi feito nesta seção para realizar a criação e implantação.
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 comando docker build cria uma imagem, ele usa um cache interno. Se os arquivos *.csproj não tiverem sido alterados desde a última execução do comando docker build, o comando dotnet restore 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 As práticas recomendadas para escrever Dockerfiles.
Recursos adicionais
- Conteinerizar um aplicativo .NET com o comando dotnet publish
- Comando de build do Docker
- Comando de execução do Docker
- ASP.NET exemplo principal do Docker (aquele usado neste tutorial).)
- Configurar ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga
- Trabalhando com as Ferramentas do Docker do Visual Studio
- Depuração com o Visual Studio Code
- GC usando o Docker e contêineres pequenos
- System.IO.IOException: o limite de usuário configurado (128) no número de instâncias inotify foi atingido
Próximas etapas
O repositório Git que contém o aplicativo de exemplo também inclui a documentação. Para obter uma visão geral dos recursos disponíveis no repositório, consulte o arquivo README. Em particular, saiba como implementar o HTTPS: