Fluxo de trabalho de desenvolvimento do loop interno para aplicativos do DockerInner-loop development workflow for Docker apps

Antes de disparar o fluxo de trabalho de loop externo que abrange todo o ciclo de DevOps, tudo começa no computador de cada desenvolvedor, codificando o aplicativo em si, usando suas linguagens ou plataformas preferenciais e testando localmente (Figura 4-21).Before triggering the outer-loop workflow spanning the entire DevOps cycle, it all begins on each developer's machine, coding the app itself, using their preferred languages or platforms, and testing it locally (Figure 4-21). Mas, em todos os casos, você terá um ponto importante em comum, independentemente da linguagem, da estrutura ou das plataformas escolhidas.But in every case, you'll have an important point in common, no matter what language, framework, or platforms you choose. Neste fluxo de trabalho específico, você está sempre desenvolvendo e testando contêineres do Docker em nenhum outro ambiente, mas localmente.In this specific workflow, you're always developing and testing Docker containers in no other environments, but locally.

Diagrama mostrando o conceito de um ambiente de desenvolvimento de loop interno.

Figura 4-21.Figure 4-21. Contexto de desenvolvimento do loop internoInner-loop development context

O contêiner ou instância de uma imagem de Docker terá estes componentes:The container or instance of a Docker image will contain these components:

  • Uma seleção de sistema operacional (por exemplo, uma distribuição do Linux ou Windows)An operating system selection (for example, a Linux distribution or Windows)

  • Arquivos adicionados pelo desenvolvedor (por exemplo, binários do aplicativo)Files added by the developer (for example, app binaries)

  • Configuração (por exemplo, configurações de ambiente e dependências)Configuration (for example, environment settings and dependencies)

  • Instruções sobre quais processos devem ser executados pelo DockerInstructions for what processes to run by Docker

Você pode configurar o fluxo de trabalho de desenvolvimento do loop interno que utiliza o Docker como processo (descrito na próxima seção).You can set up the inner-loop development workflow that utilizes Docker as the process (described in the next section). Observe que as etapas iniciais para configurar o ambiente não estão incluídas, porque você só precisa fazer isso uma vez.Consider that the initial steps to set up the environment are not included, because you only need to do it once.

Criando um único aplicativo dentro de um contêiner do Docker usando o Visual Studio Code e a CLI do DockerBuilding a single app within a Docker container using Visual Studio Code and Docker CLI

Aplicativos são compostos por seus próprios serviços e por bibliotecas adicionais (dependências).Apps are made up from your own services plus additional libraries (dependencies).

A Figura 4-22 mostra as etapas básicas que normalmente você precisaria executar ao criar um aplicativo do Docker, seguidas por descrições detalhadas de cada etapa.Figure 4-22 shows the basic steps that you usually need to carry out when building a Docker app, followed by detailed descriptions of each step.

Diagrama mostrando as sete etapas necessárias para criar um aplicativo em contêineres.

Figura 4-22.Figure 4-22. Fluxo de trabalho de alto nível do ciclo de vida de aplicativos em contêineres do Docker usando a CLI do DockerHigh-level workflow for the life cycle for Docker containerized applications using Docker CLI

Etapa 1: iniciar a codificação em Visual Studio Code e criar sua linha de base de aplicativo/serviço inicialStep 1: Start coding in Visual Studio Code and create your initial app/service baseline

A maneira como você desenvolve seu aplicativo é semelhante à maneira como o faz sem o Docker.The way you develop your application is similar to the way you do it without Docker. A diferença é que, durante o desenvolvimento, você está implantando e testando o aplicativo ou os serviços em execução dentro de contêineres do Docker colocados no ambiente local (como uma VM Linux ou Windows).The difference is that while developing, you're deploying and testing your application or services running within Docker containers placed in your local environment (like a Linux VM or Windows).

Configurando o ambiente localSetting up your local environment

Com as versões mais recentes do Docker desktop para Mac e Windows, é mais fácil do que nunca desenvolver aplicativos do Docker, e a configuração é simples.With the latest versions of Docker Desktop for Mac and Windows, it's easier than ever to develop Docker applications, and the setup is straightforward.

Dica

Para obter instruções sobre como configurar o Docker desktop para Windows, acesse https://docs.docker.com/docker-for-windows/ .For instructions on setting up Docker Desktop for Windows, go to https://docs.docker.com/docker-for-windows/.

Para obter instruções sobre como configurar o Docker desktop para Mac, vá para https://docs.docker.com/docker-for-mac/ .For instructions on setting up Docker Desktop for Mac, go to https://docs.docker.com/docker-for-mac/.

Além disso, você precisará de um editor de código para que possa desenvolver o aplicativo enquanto estiver usando a CLI do Docker.In addition, you'll need a code editor so that you can actually develop your application while using Docker CLI.

A Microsoft fornece Visual Studio Code, que é um editor de código leve com suporte no Windows, Linux e macOS, e fornece IntelliSense com suporte para várias linguagens (JavaScript, .net, go, Java, Ruby, Python e linguagens mais modernas), depuração, integração com git e suporte a extensões.Microsoft provides Visual Studio Code, which is a lightweight code editor that's supported on Windows, Linux, and macOS, and provides IntelliSense with support for many languages (JavaScript, .NET, Go, Java, Ruby, Python, and most modern languages), debugging, integration with Git and extensions support. Esse editor é uma ótima opção para desenvolvedores de macOS e Linux.This editor is a great fit for macOS and Linux developers. No Windows, você também pode usar o Visual Studio.In Windows, you also can use Visual Studio.

Dica

Para obter instruções sobre como instalar o Visual Studio Code para Windows, Linux ou macOS, vá para https://code.visualstudio.com/docs/setup/setup-overview/ .For instructions on installing Visual Studio Code for Windows, Linux, or macOS, go to https://code.visualstudio.com/docs/setup/setup-overview/.

Para obter instruções sobre como configurar o Docker para Mac, acesse https://docs.docker.com/docker-for-mac/.For instructions on setting up Docker for Mac, go to https://docs.docker.com/docker-for-mac/.

Você pode trabalhar com a CLI do Docker e escrever seu código usando qualquer editor de código, mas usar o Visual Studio Code com a extensão do Docker torna mais fácil criar arquivos Dockerfile e docker-compose.yml em seu workspace.You can work with Docker CLI and write your code using any code editor, but using Visual Studio Code with the Docker extension makes it easy to author Dockerfile and docker-compose.yml files in your workspace. Você também pode executar tarefas e scripts do IDE do Visual Studio Code para executar comandos do Docker usando a CLI do Docker abaixo.You can also run tasks and scripts from the Visual Studio Code IDE to execute Docker commands using the Docker CLI underneath.

A extensão do Docker para o VS Code fornece os seguintes recursos:The Docker extension for VS Code provides the following features:

  • Geração automática de arquivos Dockerfile e docker-compose.ymlAutomatic Dockerfile and docker-compose.yml file generation

  • Destaque de sintaxe e dicas ao passar o mouse para arquivos docker-compose.yml e DockerfileSyntax highlighting and hover tips for docker-compose.yml and Dockerfile files

  • IntelliSense (preenchimentos) para arquivos Dockerfile e docker-compose.ymlIntelliSense (completions) for Dockerfile and docker-compose.yml files

  • Linting (erros e avisos) para arquivos DockerfileLinting (errors and warnings) for Dockerfile files

  • Integração de paleta de comandos (F1) para os comandos do Docker mais comunsCommand Palette (F1) integration for the most common Docker commands

  • Integração do Explorer para gerenciar Imagens e ContêineresExplorer integration for managing Images and Containers

  • Implantar imagens do DockerHub e dos Registros de Contêiner do Azure no Serviço de Aplicativo do AzureDeploy images from DockerHub and Azure Container Registries to Azure App Service

Para instalar a extensão do Docker, pressione Ctrl + Shift + P, digite ext install e, em seguida, execute o comando Instalar Extensão para abrir a lista de extensões do Marketplace.To install the Docker extension, press Ctrl+Shift+P, type ext install, and then run the Install Extension command to bring up the Marketplace extension list. Em seguida, digite docker para filtrar os resultados e, então, selecione a extensão Docker Support, conforme ilustrado na Figura 4-23.Next, type docker to filter the results, and then select the Docker Support extension, as depicted in Figure 4-23.

Modo de exibição da extensão do Docker para VS Code.

Figura 4-23.Figure 4-23. Instalando a extensão do Docker no Visual Studio CodeInstalling the Docker Extension in Visual Studio Code

Você precisará de um DockerFile por imagem personalizada a ser criada e por contêiner a ser implantado.You'll need a DockerFile per custom image to be built and per container to be deployed. Se seu aplicativo for composto por um único serviço personalizado, você precisará de um único DockerFile .If your app is made up of single custom service, you'll need a single DockerFile. No entanto, se o aplicativo for composto por vários serviços (por exemplo, em uma arquitetura de microsserviços), você precisará de um Dockerfile por serviço.But if your app is composed of multiple services (as in a microservices architecture), you'll need one Dockerfile per service.

Normalmente, o DockerFile é colocado na pasta raiz do aplicativo ou serviço e contém os comandos necessários para que o Docker saiba como configurar e executar esse aplicativo ou serviço.The DockerFile is commonly placed in the root folder of your app or service and contains the required commands so that Docker knows how to set up and run that app or service. Você pode criar seu DockerFile e adicioná-lo ao projeto junto com o código (Node.js, .NET Core etc.) ou, se você for novo no ambiente, veja a dica a seguir.You can create your DockerFile and add it to your project along with your code (node.js, .NET Core, etc.), or, if you're new to the environment, take a look at the following Tip.

Dica

Você pode usar a extensão do Docker para orientá-lo ao usar os arquivos Dockerfile e docker-compose.yml relacionados a seus contêineres do Docker.You can use the Docker extension to guide you when using the Dockerfile and docker-compose.yml files related to your Docker containers. Eventualmente, você provavelmente gravará esses tipos de arquivos sem essa ferramenta, mas usar a extensão do Docker é um bom ponto de partida que acelerará sua curva de aprendizado.Eventually, you'll probably write these kinds of files without this tool, but using the Docker extension is a good starting point that will accelerate your learning curve.

Na Figura 4-24, você pode ver as etapas para adicionar os arquivos do Docker a um projeto usando a extensão do Docker para VS Code:In Figure 4-24, you can see the steps to add the docker files to a project by using the Docker Extension for VS Code:

  1. Abra a paleta de comandos, digite "Docker" e selecione "Adicionar arquivos do Docker ao espaço de trabalho".Open the command palette, type "docker" and select "Add Docker Files to Workspace".
  2. Selecionar plataforma de aplicativo (ASP.NET Core)Select Application Platform (ASP.NET Core)
  3. Selecionar sistema operacional (Linux)Select Operating System (Linux)
  4. Incluir arquivos de Docker Compose opcionaisInclude optional Docker Compose files
  5. Insira as portas a serem publicadas (80, 443)Enter ports to publish (80, 443)
  6. Selecione o projetoSelect the project

Etapas para adicionar arquivos do Docker com a extensão do Docker

Figura 4-24.Figure 4-24. Arquivos do Docker adicionados usando o comando Adicionar arquivos do Docker ao espaço de trabalhoDocker files added using the Add Docker files to Workspace command

Quando você adiciona um DockerFile, você especifica qual imagem do Docker base você usará (como usar FROM mcr.microsoft.com/dotnet/aspnet ).When you add a DockerFile, you specify what base Docker image you'll be using (like using FROM mcr.microsoft.com/dotnet/aspnet). Normalmente, você criará sua imagem personalizada usando uma imagem de base que obteve de qualquer repositório oficial no Registro do Docker Hub (como uma imagem para .NET Core o a imagem para Node.js).You'll usually build your custom image on top of a base image that you get from any official repository at the Docker Hub registry (like an image for .NET Core or the one for Node.js).

Dica

Você precisará repetir esse procedimento para cada projeto em seu aplicativo.You'll have to repeat this procedure for every project in your application. No entanto, a extensão solicitará que o arquivo do Docker-compote gerado seja substituído após a primeira vez.However, the extension will ask to overwrite the generated docker-compose file after the first time. Você deve responder a não substituí-lo, portanto, a extensão cria arquivos separados do Docker-Compose, que você pode mesclar manualmente, antes de executar o Docker-Compose.You should reply to not overwrite it, so the extension creates separate docker-compose files, that you can then merge by hand, prior to running docker-compose.

Usar uma imagem oficial do Docker existenteUse an existing official Docker image

Usar um repositório oficial de uma pilha de linguagem com um número de versão garante que recursos da mesma linguagem estejam disponíveis em todos os computadores (incluindo desenvolvimento, teste e produção).Using an official repository of a language stack with a version number ensures that the same language features are available on all machines (including development, testing, and production).

A seguir, há um DockerFile de exemplo para um contêiner do .NET Core:The following is a sample DockerFile for a .NET Core container:

FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["src/WebApi/WebApi.csproj", "src/WebApi/"]
RUN dotnet restore "src/WebApi/WebApi.csproj"
COPY . .
WORKDIR "/src/src/WebApi"
RUN dotnet build "WebApi.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApi.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApi.dll"]

Nesse caso, a imagem é baseada na versão 3,1 do oficial ASP.NET Core imagem do Docker (vários arcos para Linux e Windows), de acordo com a linha FROM mcr.microsoft.com/dotnet/aspnet:3.1 .In this case, the image is based on version 3.1 of the official ASP.NET Core Docker image (multi-arch for Linux and Windows), as per the line FROM mcr.microsoft.com/dotnet/aspnet:3.1. (Para obter mais informações sobre esse tópico, confira a página Imagem do Docker do ASP.NET Core e a página Imagem do Docker do .NET Core).(For more information about this topic, see the ASP.NET Core Docker Image page and the .NET Core Docker Image page).

No DockerFile, você também pode instruir o Docker para escutar a porta TCP que você usará no tempo de execução (como a porta 80 ou 443).In the DockerFile, you can also instruct Docker to listen to the TCP port that you'll use at runtime (such as port 80 or 443).

Você pode especificar mais definições de configurações no Dockerfile, dependendo da linguagem e da estrutura usadas.You can specify additional configuration settings in the Dockerfile, depending on the language and framework you're using. Por exemplo, a linha ENTRYPOINT com ["dotnet", "WebMvcApplication.dll"] instrui o Docker a executar um aplicativo do .NET Core.For instance, the ENTRYPOINT line with ["dotnet", "WebMvcApplication.dll"] tells Docker to run a .NET Core application. Se você estiver usando o SDK e a CLI do .NET Core (dotnet CLI) para criar e executar o aplicativo do .NET, essa configuração será diferente.If you're using the SDK and the .NET Core CLI (dotnet CLI) to build and run the .NET application, this setting would be different. O essencial aqui é que a linha ENTRYPOINT e outras configurações dependem da linguagem e da plataforma que você escolher para seu aplicativo.The key point here is that the ENTRYPOINT line and other settings depend on the language and platform you choose for your application.

Dica

Para obter mais informações sobre a criação de imagens do Docker para aplicativos .NET Core, acesse /dotnet/core/docker/building-net-docker-images.For more information about building Docker images for .NET Core applications, go to /dotnet/core/docker/building-net-docker-images.

Para saber mais sobre como criar suas próprias imagens, acesse https://docs.docker.com/engine/tutorials/dockerimages/.To learn more about building your own images, go to https://docs.docker.com/engine/tutorials/dockerimages/.

Usar repositórios de imagens com várias arquiteturasUse multi-arch image repositories

Um único nome de imagem em um repositório pode conter variantes de plataforma, como uma imagem do Linux e uma imagem do Windows.A single image name in a repo can contain platform variants, such as a Linux image and a Windows image. Esse recurso permite que fornecedores como a Microsoft (criadores de imagem base) criem um único repositório para abranger várias plataformas (ou seja, Linux e Windows).This feature allows vendors like Microsoft (base image creators) to create a single repo to cover multiple platforms (that is, Linux and Windows). Por exemplo, o repositório dotnet/core/aspnet, disponível no registro do Docker Hub, é compatível com Linux e Windows Nano Server usando o mesmo nome de imagem.For example, the dotnet/core/aspnet repository available in the Docker Hub registry provides support for Linux and Windows Nano Server by using the same image name.

Efetuar pull da imagem dotnet/core/aspnet de um host do Windows efetua pull da variante do Windows, enquanto efetuar pull do mesmo nome de imagem de um host Linux efetua pull da variante do Linux.Pulling the dotnet/core/aspnet image from a Windows host pulls the Windows variant, whereas pulling the same image name from a Linux host pulls the Linux variant.

Criar sua imagem base do zeroCreate your base image from scratch

Você pode criar sua própria imagem base do Docker do zero, conforme explicado neste artigo do Docker.You can create your own Docker base image from scratch as explained in this article from Docker. Esse cenário provavelmente não é recomendado para iniciantes no Docker, mas, se você quiser definir os bits específicos de sua própria imagem base, poderá fazer isso.This scenario is probably not the best for you if you're just starting with Docker, but if you want to set the specific bits of your own base image, you can do it.

Etapa 3: criar suas imagens personalizadas do Docker inserindo seu serviço neleStep 3: Create your custom Docker images embedding your service in it

Para cada serviço personalizado que compõe seu aplicativo, você precisará criar uma imagem relacionada.For each custom service that comprises your app, you'll need to create a related image. Se seu aplicativo for composto por um único serviço ou aplicativo Web, você precisará apenas de uma única imagem.If your app is made up of a single service or web app, you'll need just a single image.

Observação

Ao levar em consideração o "fluxo de trabalho de DevOps de loop externo", as imagens serão criadas por um processo de build automatizado sempre que você efetuar push de seu código-fonte para um repositório Git (integração contínua), portanto, as imagens serão criadas no ambiente global de seu código-fonte.When taking into account the "outer-loop DevOps workflow", the images will be created by an automated build process whenever you push your source code to a Git repository (Continuous Integration), so the images will be created in that global environment from your source code.

Mas antes de você considerar a saída dessa rota de loop externo, você precisa garantir que o aplicativo Docker esteja realmente funcionando corretamente para que eles não enviem um código que possa não funcionar corretamente para o sistema de controle do código-fonte (git, etc.).But before you consider going to that outer-loop route, you need to ensure that the Docker application is actually working properly so that they don't push code that might not work properly to the source control system (Git, etc.).

Sendo assim, cada desenvolvedor precisa primeiro realizar todo o processo de loop interno para testar localmente e continuar desenvolvendo até que queiram efetuar push de um recurso ou alteração completa para o sistema de controle do código-fonte.Therefore, each developer first needs to do the entire inner-loop process to test locally and continue developing until they want to push a complete feature or change to the source control system.

Para criar uma imagem em seu ambiente local e usar o DockerFile, você pode usar o comando Docker Build, como mostrado na Figura 4-25, porque ele já marca a imagem para você e compila as imagens para todos os serviços no aplicativo com um comando simples.To create an image in your local environment and using the DockerFile, you can use the docker build command, as shown in Figure 4-25, because it already tags the image for you and builds the images for all services in the application with a simple command.

Captura de tela mostrando a saída do console do comando Docker-Compose Build.

Figura 4-25.Figure 4-25. Executando docker buildRunning docker build

Opcionalmente, em vez de executar docker build diretamente da pasta do projeto, você pode primeiro gerar uma pasta implantável com as bibliotecas .NET necessárias usando o comando run dotnet publish e, em seguida, executando docker build.Optionally, instead of directly running docker build from the project folder, you first can generate a deployable folder with the .NET libraries needed by using the run dotnet publish command, and then run docker build.

Este exemplo cria uma imagem do Docker com o nome explore-docker-vscode/webapi:latest (:latest é uma marca, como uma versão específica).This example creates a Docker image with the name explore-docker-vscode/webapi:latest (:latest is a tag, like a specific version). Você poderá realizar esta etapa para cada imagem personalizada que precisar criar para o seu aplicativo do Docker composto com vários contêineres.You can take this step for each custom image you need to create for your composed Docker application with several containers. No entanto, veremos na próxima seção que é mais fácil fazer isso usando docker-compose .However, we'll see in the next section that it's easier to do this using docker-compose.

Você pode encontrar as imagens existentes no seu repositório local (seu computador de desenvolvimento) usando o docker images comando, como ilustrado na figura 4-26.You can find the existing images in your local repository (your development machine) by using the docker images command, as illustrated in Figure 4-26.

Saída do console do comando docker images, mostrando as imagens existentes.

Figura 4-26.Figure 4-26. Exibindo imagens existentes usando imagens do DockerViewing existing images using docker images

Etapa 4: definir seus serviços em Docker-Compose. yml ao criar um aplicativo do Docker composto com vários serviçosStep 4: Define your services in docker-compose.yml when building a composed Docker app with multiple services

Com o arquivo docker-compose.yml, você pode definir um conjunto de serviços relacionados para que sejam implantados como um aplicativo composto usando os comandos de implantação explicados na seção sobre a próxima etapa.With the docker-compose.yml file, you can define a set of related services to be deployed as a composed application with the deployment commands explained in the next step section.

Crie esse arquivo na pasta principal ou raiz da solução; ele deve ter conteúdo semelhante ao mostrado neste arquivo docker-compose.yml:Create that file in your main or root solution folder; it should have content similar to that shown in this docker-compose.yml file:

version: "3.4"

services:
  webapi:
    image: webapi
    build:
      context: .
      dockerfile: src/WebApi/Dockerfile
    ports:
      - 51080:80
    depends_on:
      - redis
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://+:80

  webapp:
    image: webapp
    build:
      context: .
      dockerfile: src/WebApp/Dockerfile
    ports:
      - 50080:80
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://+:80
      - WebApiBaseAddress=http://webapi

  redis:
    image: redis

Nesse caso em particular, esse arquivo define três serviços: o serviço de API Web (seu serviço personalizado), um aplicativo Web e o serviço Redis (um serviço de cache popular).In this particular case, this file defines three services: the web API service (your custom service), a web application, and the Redis service (a popular cache service). Cada serviço será implantado como um contêiner, portanto, você precisa usar uma imagem concreta do Docker para cada um.Each service will be deployed as a container, so you need to use a concrete Docker image for each. Para este aplicativo específico:For this particular application:

  • O serviço de API Web é criado a partir do DockerFile no src/WebApi/Dockerfile diretório.The web API service is built from the DockerFile in the src/WebApi/Dockerfile directory.

  • A porta de host 51080 é encaminhada para a porta exposta 80 no webapi contêiner.The host port 51080 is forwarded to the exposed port 80 on the webapi container.

  • O serviço API da Web depende do serviço RedisThe web API service depends on the Redis service

  • O aplicativo Web acessa o serviço de API Web usando o endereço interno: http://webapi .The web application accesses the web API service using the internal address: http://webapi.

  • O serviço Redis usa a imagem de Redis pública mais recente extraída do registro do Hub do Docker.The Redis service uses the latest public redis image pulled from the Docker Hub registry. Redis é um sistema de cache popular para aplicativos do lado do servidor.Redis is a popular cache system for server-side applications.

Etapa 5: criar e executar o aplicativo DockerStep 5: Build and run your Docker app

Se seu aplicativo tiver apenas um contêiner, você precisará apenas executá-lo implantando-o no host do Docker (VM ou servidor físico).If your app has only a single container, you just need to run it by deploying it to your Docker Host (VM or physical server). No entanto, se o aplicativo for composto por vários serviços, você também precisará compô-lo.However, if your app is made up of multiple services, you need to compose it, too. Vejamos as diferentes opções.Let's see the different options.

Opção A: executar um único contêiner ou serviçoOption A: Run a single container or service

Você pode executar a imagem do Docker usando o comando docker run, conforme mostrado aqui:You can run the Docker image by using the docker run command, as shown here:

docker run -t -d -p 50080:80 explore-docker-vscode/webapp:latest

Para essa implantação específica, vamos redirecionar as solicitações enviadas para a porta 50080 no host para a porta interna 80.For this particular deployment, we'll be redirecting requests sent to port 50080 on the host to the internal port 80.

Opção B: compor e executar um aplicativo de vários contêineresOption B: Compose and run a multiple-container application

Na maioria dos cenários empresariais, um aplicativo do Docker será composto por vários serviços.In most enterprise scenarios, a Docker application will be composed of multiple services. Nesses casos, você pode executar o docker-compose up comando (figura 4-27), que usará o arquivo Docker-Compose. yml que você criou anteriormente.For these cases, you can run the docker-compose up command (Figure 4-27), which will use the docker-compose.yml file that you created previously. A execução desse comando compila todas as imagens personalizadas e implanta o aplicativo composto com todos os seus contêineres relacionados.Running this command builds all custom images and deploys the composed application with all of its related containers.

Saída de console do comando docker-compose up.

Figura 4-27.Figure 4-27. Resultados da execução do comando "docker-compose up"Results of running the "docker-compose up" command

Depois de executar docker-compose up, implante seu aplicativo e os contêineres relacionados no Host do Docker, conforme ilustrado na Figura 4-28, na representação da VM.After you run docker-compose up, you deploy your application and its related container(s) into your Docker Host, as illustrated in Figure 4-28, in the VM representation.

VM executando aplicativos de vários contêineres.

Figura 4-28.Figure 4-28. VM com contêineres do Docker implantadosVM with Docker containers deployed

Etapa 6: testar o aplicativo Docker (localmente, em sua VM de CD local)Step 6: Test your Docker application (locally, in your local CD VM)

Esta etapa varia de acordo com o que seu aplicativo está fazendo.This step will vary depending on what your app is doing.

Em um simples "Olá, Mundo" da API Web do .NET Core implantado como um único contêiner ou serviço, você precisará apenas acessar o serviço fornecendo a porta TCP especificada no DockerFile.In a simple .NET Core Web API "Hello World" deployed as a single container or service, you'd just need to access the service by providing the TCP port specified in the DockerFile.

No host do Docker, abra um navegador e navegue até esse site. Você deverá ver seu aplicativo/serviço em execução, conforme demonstrado na Figura 4-29.On the Docker host, open a browser and navigate to that site; you should see your app/service running, as demonstrated in Figure 4-29.

Modo de exibição de navegador da resposta de localhost/API/ valores.

Figura 4-29.Figure 4-29. Testando o aplicativo Docker localmente usando o navegadorTesting your Docker application locally by using the browser

Observe que ele está usando a porta 50080, mas internamente ela está sendo redirecionada para a porta 80, porque é assim que ela foi implantada docker compose , conforme explicado anteriormente.Note that it's using port 50080, but internally it's being redirected to port 80, because that's how it was deployed with docker compose, as explained earlier.

Você pode testar isso usando o navegador usando a rotação do terminal, conforme descrito na Figura 4-30.You can test this by using the browser using CURL from the terminal, as depicted in Figure 4-30.

O resultado da ondulação obtido de http://localhost:51080/WeatherForecast

Figura 4-30.Figure 4-30. Testando um aplicativo do Docker localmente usando CURLTesting a Docker application locally by using CURL

Depurando um contêiner em execução no DockerDebugging a container running on Docker

O Visual Studio Code dá suporte à depuração do Docker quando você está usando Node.js e outras plataformas, como contêineres do .NET Core.Visual Studio Code supports debugging Docker if you're using Node.js and other platforms like .NET Core containers.

Você também pode depurar contêineres do .NET Core ou .NET Framework no Docker ao usar o Visual Studio para Windows ou Mac, conforme descrito na próxima seção.You also can debug .NET Core or .NET Framework containers in Docker when using Visual Studio for Windows or Mac, as described in the next section.