Partilhar via


Migração ASP.NET Aplicações MVC para Contentores Windows

Executar uma aplicação existente baseada em .NET Framework num contentor do Windows não requer alterações à sua aplicação. Para executar a sua aplicação num contentor Windows, cria uma imagem Docker contendo a sua aplicação e inicia o container. Este tópico explica como pegar numa aplicação existente ASP.NET MVC e implementá-la num contentor Windows.

Começas com uma aplicação ASP.NET MVC existente e depois constróis os recursos publicados usando o Visual Studio. Usa o Docker para criar a imagem que contém e executa a sua aplicação. Vai aceder ao site que está a correr num container Windows para verificar se a aplicação está a funcionar corretamente.

Este artigo pressupõe uma compreensão básica do Docker. Você pode aprender sobre o Docker lendo a Visão geral do Docker.

A aplicação que vais usar num contentor é um site simples que responde a perguntas aleatoriamente. Esta aplicação é uma aplicação básica MVC sem autenticação ou armazenamento de base de dados; Permite-te focar-te em mover o tier web para um contentor. Tópicos futuros mostrarão como mover e gerir armazenamento persistente em aplicações contentorizadas.

Avançar com a sua candidatura envolve estes passos:

  1. Criar uma tarefa de publicação para construir os recursos para uma imagem.
  2. Construir uma imagem Docker que execute a sua aplicação.
  3. Iniciar um contentor Docker que execute a sua imagem.
  4. Verificar a aplicação usando o seu navegador.

A aplicação final está no GitHub.

Pré-requisitos

A máquina de desenvolvimento deve ter o seguinte software:

Importante

Se estiver a usar o Windows Server 2016, siga as instruções para Implementação de Host de Contêiner - Windows Server.

Depois de instalar e iniciar o Docker, clique com o botão direito no ícone da bandeja e selecione Mudar para os contentores do Windows. Isto é necessário para executar imagens Docker baseadas no Windows. Este comando demora alguns segundos a ser executado:

Contentor do Windows

Publicar o script

Reúne todos os assets que precisas para carregar numa imagem Docker num só local. Pode usar o comando Publicar do Visual Studio para criar um perfil de publicação para a sua aplicação. Este perfil irá colocar todos os assets numa única árvore de diretórios que copiará para a sua imagem de destino mais tarde neste tutorial.

Etapas de Publicação

  1. Clique com o botão direito no projeto web no Visual Studio e selecione Publicar.
  2. Clique no botão Perfil Personalizado e depois selecione Sistema de Ficheiros como método.
  3. Escolha o diretório. Por convenção, a amostra descarregada utiliza bin\Release\PublishOutput.

Publicar Ligação

Abra a secção Opções de Publicação de Ficheiros na aba Definições. Selecione Pré-compilar ao publicar. Esta otimização significa que vais compilar as vistas no contentor Docker, estás a copiar as vistas pré-compiladas.

Definições de Publicação

Clica em Publicar, e o Visual Studio irá copiar todos os assets necessários para a pasta de destino.

Criar a imagem

Crie um novo ficheiro chamado Dockerfile para definir a sua imagem Docker. O Dockerfile contém instruções para construir a imagem final e inclui quaisquer nomes de imagem base, componentes necessários, a aplicação que pretende executar e outras imagens de configuração. Dockerfile é a entrada do docker build comando que cria a imagem.

Para este exercício, vais construir uma imagem baseada na microsoft/aspnet imagem localizada no Docker Hub. A imagem base, mcr.microsoft.com/dotnet/framework/aspnet:4.8, é uma imagem do Windows Server. Inclui Windows Server Core, IIS e ASP.NET 4.8. Quando executas esta imagem no teu contentor, ela inicia automaticamente o IIS e instala os sites.

O Dockerfile que cria a sua imagem é assim:

# The `FROM` instruction specifies the base image. You are
# extending the `mcr.microsoft.com/dotnet/framework/aspnet:4.8` image.

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8

# The final instruction copies the site you published earlier into the container.
COPY ./bin/Release/PublishOutput/ /inetpub/wwwroot

Não há nenhum ENTRYPOINT comando neste Dockerfile. Não precisas de um. Ao executar o Windows Server com IIS, o processo IIS é o ponto de entrada, que está configurado para iniciar na imagem base aspnet.

Executa o comando de build do Docker para criar a imagem que executa a tua aplicação ASP.NET. Para isso, abra uma janela PowerShell no diretório do seu projeto e escreva o seguinte comando no diretório da solução:

docker build -t mvcrandomanswers .

Este comando irá construir a nova imagem usando as instruções do seu Dockerfile, nomeando (-t etiquetando) a imagem como mvcrandomanswers. Isto pode incluir extrair a imagem base do Docker Hub e depois adicionar a sua aplicação a essa imagem.

Quando esse comando estiver concluído, pode executá-lo docker images para ver a informação na nova imagem:

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
mvcrandomanswers              latest              86838648aab6        2 minutes ago       10.1 GB

O ID IMAGEM será diferente na sua máquina. Agora, vamos usar a aplicação.

Inicie um contentor

Inicie um contentor executando o seguinte docker run comando:

docker run -d --name randomanswers mvcrandomanswers

O -d argumento diz ao Docker para iniciar a imagem em modo desligado. Isto significa que a imagem Docker corre sem ligação à shell atual.

Em muitos exemplos de docker, pode ver -p para mapear as portas do container e do host. A imagem padrão aspnet já configurou o contentor para escutar na porta 80 e expor esta porta.

Confere --name randomanswers um nome ao container ativo. Podes usar este nome em vez do ID do contentor na maioria dos comandos.

Este mvcrandomanswers é o nome da imagem para iniciar.

Verificar no navegador

Assim que o contentor começar, ligue-se ao contentor em execução usando, como demonstrado no exemplo http://localhost. Escreve esse URL no teu navegador e deves ver o site em execução.

Observação

Algumas VPN ou software proxy podem impedir-te de navegar até ao teu site. Podes desativá-lo temporariamente para garantir que o teu contentor está a funcionar.

O diretório de exemplo no GitHub contém um script PowerShell que executa estes comandos por si. Abra uma janela PowerShell, mude diretório para o diretório da sua solução e escreva:

./run.ps1

O comando acima constrói a imagem, mostra a lista de imagens na sua máquina e inicia um contentor.

Para parar o seu contentor, emita um docker stop comando:

docker stop randomanswers

Para remover o contentor, emita um docker rm comando:

docker rm randomanswers