Exercício – personalizar uma imagem do Docker para executar a sua própria aplicação Web
Um Dockerfile contém os passos para criar uma imagem personalizada do Docker.
Você decide implantar um dos aplicativos Web da sua organização usando o Docker. Você seleciona um aplicativo Web simples que implementa uma API da Web para um site de reservas de hotel. A API da Web expõe operações HTTP POST e GET que criam e recuperam as reservas dos clientes.
Nota
Nesta versão do aplicativo Web, as reservas não são realmente persistentes e as consultas retornam dados fictícios.
Neste exercício, irá criar um Dockerfile para uma aplicação que não tenha um. Em seguida, irá criar a imagem e executá-la localmente.
Criar um Dockerfile para a aplicação Web
Se ainda não estiver em execução, inicie o Docker no seu computador.
Numa janela da linha de comandos do seu computador local, execute o seguinte comando para transferir o código fonte da aplicação Web.
git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
Digite o seguinte comando para abrir o
src
diretório.cd mslearn-hotel-reservation-system/src
src
No diretório, digite os seguintes comandos para criar um novo arquivo chamadoDockerfile
e abri-lo no Bloco de Notas:copy NUL Dockerfile notepad Dockerfile
Nota
Por padrão, o comando do bloco de notas abre um arquivo de texto. Certifique-se de salvá-lo como tipo de arquivo Todos os arquivos sem extensão de arquivo. Para verificar, abra a pasta src no Explorador de Ficheiros, selecione Ver > Mostrar> extensões de nome de ficheiro. Se necessário, renomeie o arquivo e remova
.txt
do nome do arquivo.Adicione o seguinte código ao Dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 WORKDIR /src COPY ["/HotelReservationSystem/HotelReservationSystem.csproj", "HotelReservationSystem/"] COPY ["/HotelReservationSystemTypes/HotelReservationSystemTypes.csproj", "HotelReservationSystemTypes/"] RUN dotnet restore "HotelReservationSystem/HotelReservationSystem.csproj"
Este código tem comandos para buscar uma imagem que contém o SDK do .NET Core Framework. Os arquivos de projeto para o aplicativo Web (
HotelReservationSystem.csproj
) e o projeto de biblioteca (HotelReservationSystemTypes.csproj
) são copiados para a/src
pasta no contêiner. Odotnet restore
comando baixa as dependências exigidas por esses projetos do NuGet.Anexe o seguinte código à parte inferior do Dockerfile:
COPY . . WORKDIR "/src/HotelReservationSystem" RUN dotnet build "HotelReservationSystem.csproj" -c Release -o /app
Esses comandos copiam o código-fonte do aplicativo Web para o contêiner e, em seguida, executam o comando dotnet build para criar o aplicativo. As DLLs resultantes são gravadas
/app
na pasta no contêiner.Anexe o seguinte comando na parte inferior do Dockerfile.
RUN dotnet publish "HotelReservationSystem.csproj" -c Release -o /app
O
dotnet publish
comando copia os executáveis do site para uma nova pasta e remove todos os arquivos provisórios. Os arquivos nessa pasta podem ser implantados em um site.Anexe os seguintes comandos à parte inferior do Dockerfile.
EXPOSE 80 WORKDIR /app ENTRYPOINT ["dotnet", "HotelReservationSystem.dll"]
O primeiro comando abre a porta 80 no contentor. O segundo comando move-se para a pasta
/app
que contém a versão publicada da aplicação Web. O comando final especifica que, quando o contentor está em execução, este deve executar o comandodotnet HotelReservationSystem.dll
. Esta biblioteca contém o código compilado para o aplicativo Web.Guarde o ficheiro e feche o editor de texto. Certifique-se de salvá-lo como tipo de arquivo Todos os arquivos sem extensão de arquivo.
Criar e implementar a imagem através do Dockerfile
Na linha de comandos, execute o seguinte comando para criar a imagem para a aplicação de exemplo através do Dockerfile. Não se esqueça de
.
no final do comando. Este comando cria a imagem e armazena-a localmente. É atribuído o nomereservationsystem
à imagem. Verifique se a imagem foi criada com êxito. Um aviso sobre permissões de arquivo e diretório pode ser exibido quando o processo for concluído. Pode ignorar este aviso para efeitos deste exercício. A imagem pode demorar um pouco para ser construída.docker build -t reservationsystem .
Execute o seguinte comando para verificar se a imagem foi criada e armazenada no registro local:
docker image list
A imagem terá o nome
reservationsystem
. Você também terá uma imagem chamada microsoft/dotnet:REPOSITORY TAG IMAGE ID CREATED SIZE reservationsystem latest d2501f0f2ced About a minute ago 1.76GB
Testar a aplicação Web
Insira o código a seguir para executar um contêiner usando a
reservationsystem
imagem. O Docker retornará uma longa sequência de dígitos hexadecimais. O contêiner é executado em segundo plano sem nenhuma interface do usuário. A porta 80 do contentor é mapeada à porta 8080 na máquina anfitriã. É atribuído o nomereservations
ao contentor.docker run -p 8080:80 -d --name reservations reservationsystem
Abra um browser e navegue para
http://localhost:8080/api/reservations/1
. Você verá um objeto JSON contendo os dados para o número de reserva 1 semelhante à seguinte saída:Substitua o "1" no final do URL do host local por um número de reserva diferente, como 2 ou 20, para visualizar os detalhes da reserva correspondentes.
Execute o seguinte comando para exibir o status do contêiner:
docker ps -a
A saída lista o seguinte para todos os contêineres disponíveis:
- ID DO CONTÊINER
- IMAGEM
- COMANDO
- Tempo CRIADO
- ESTADO
- PORTOS
- NOMES
Verifique se o contêiner está
STATUS
ativo.CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07b0d1de4db7 reservationsystem "dotnet HotelReserva…" 5 minutes ago Up 5 minutes 0.0.0.0:8080->80/tcp reservations
Digite o seguinte comando para parar o contêiner de reservas :
docker container stop reservations
Elimine o contentor reservations a partir do registo local.
docker rm reservations
Deixe o contentor reservationsystem no registo local. Você usará essa imagem no próximo exercício.
Parabéns! Você criou uma imagem para seu aplicativo Web e a executou usando um contêiner do Docker.