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.
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:
- Criar uma tarefa de publicação para construir os recursos para uma imagem.
- Construir uma imagem Docker que execute a sua aplicação.
- Iniciar um contentor Docker que execute a sua imagem.
- 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:
- Atualização Aniversário do Windows 10 (ou superior) ou Windows Server 2016 (ou superior)
- Docker para Windows - versão estável 1.13.0 ou 1.12 Beta 26 (ou versões mais recentes)
- Visual Studio 2017
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:
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
- Clique com o botão direito no projeto web no Visual Studio e selecione Publicar.
- Clique no botão Perfil Personalizado e depois selecione Sistema de Ficheiros como método.
- Escolha o diretório. Por convenção, a amostra descarregada utiliza
bin\Release\PublishOutput.
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.
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