Tutorial – preparar um aplicativo para o AKS (Serviço de Kubernetes do Azure)

Neste tutorial, parte um de sete, um aplicativo de vários contêineres é preparado para uso no Kubernetes. Você usa ferramentas de desenvolvimento existentes, como o Docker Compose, para compilar e testar localmente o aplicativo. Você aprenderá como:

  • Clonar o código-fonte de um aplicativo de exemplo do GitHub.
  • Criar uma imagem de contêiner a partir da origem do aplicativo de exemplo.
  • Testar o aplicativo de vários contêineres em um ambiente Docker local.

Uma vez concluído, o seguinte aplicativo será executado em seu ambiente de desenvolvimento local:

Captura de tela mostrando o aplicativo Azure Store Front em execução localmente aberto em um navegador da Web local.

Em tutoriais posteriores, você carrega a imagem do contêiner em um ACR (Registro de Contêiner do Azure) e, em seguida, implanta a imagem em um cluster do AKS.

Antes de começar

Este tutorial assume uma compreensão básica dos conceitos fundamentais do Docker como contêineres, imagens de contêiner e comandos do docker. Consulte Introdução ao Docker para conhecer os conceitos básicos de contêiner.

Para concluir este tutorial, você precisa de um ambiente de desenvolvimento local do Docker que executa contêineres do Linux. O Docker fornece pacotes que o configuram facilmente em qualquer sistema Mac, Windows ou Linux.

Observação

O Azure Cloud Shell não inclui os componentes do Docker necessários para concluir todas as etapas destes tutoriais. Portanto, é recomendável usar um ambiente de desenvolvimento completo do Docker.


Obter o código de aplicativo

O aplicativo de exemplo usado neste tutorial é um aplicativo store-front básico, incluindo as seguintes implantações e serviços do Kubernetes:

Captura de tela da arquitetura de exemplo da Azure Store.

  • Frente de loja: Aplicativo Web para clientes visualizarem produtos e fazerem pedidos.
  • Serviço do produto: Mostra informações do produto.
  • Serviço de pedido: Realiza pedidos.
  • Rabbit MQ: Fila de mensagens de uma fila de pedidos.
  1. Use o Git para clonar o aplicativo de exemplo no ambiente de desenvolvimento.

    git clone https://github.com/Azure-Samples/aks-store-demo.git
    
  2. Altere para o diretório clonado.

    cd aks-store-demo
    

Revisão de arquivo do Docker Compose

O aplicativo de exemplo que você cria nesse tutorial usa o arquivo YAML docker-compose-quickstart do repositório que você clonou.

services:
  rabbitmq:
    image: rabbitmq:3.13.2-management-alpine
    container_name: 'rabbitmq'
    restart: always
    environment:
      - "RABBITMQ_DEFAULT_USER=username"
      - "RABBITMQ_DEFAULT_PASS=password"
    ports:
      - 15672:15672
      - 5672:5672
    healthcheck:
      test: ["CMD", "rabbitmqctl", "status"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - ./rabbitmq_enabled_plugins:/etc/rabbitmq/enabled_plugins
    networks:
      - backend_services
  order-service:
    build: src/order-service
    container_name: 'order-service'
    restart: always
    ports:
      - 3000:3000
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://order-service:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - ORDER_QUEUE_HOSTNAME=rabbitmq
      - ORDER_QUEUE_PORT=5672
      - ORDER_QUEUE_USERNAME=username
      - ORDER_QUEUE_PASSWORD=password
      - ORDER_QUEUE_NAME=orders
      - ORDER_QUEUE_RECONNECT_LIMIT=3
    networks:
      - backend_services
    depends_on:
      rabbitmq:
        condition: service_healthy
  product-service:
    build: src/product-service
    container_name: 'product-service'
    restart: always
    ports:
      - 3002:3002
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://product-service:3002/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - AI_SERVICE_URL=http://ai-service:5001/
    networks:
      - backend_services
  store-front:
    build: src/store-front
    container_name: 'store-front'
    restart: always
    ports:
      - 8080:8080
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://store-front:80/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - VUE_APP_PRODUCT_SERVICE_URL=http://product-service:3002/
      - VUE_APP_ORDER_SERVICE_URL=http://order-service:3000/
    networks:
      - backend_services
    depends_on:
      - product-service
      - order-service
networks:
  backend_services:
    driver: bridge

Criar imagens de contêiner e executar o aplicativo

É possível usar o Docker Compose para automatizar a compilação de imagens de contêiner e a implantação de aplicativos de vários contêineres.

Docker

  1. Crie a imagem de contêiner, baixe a imagem RabbitMQ e inicie o aplicativo usando o comando docker compose:

    docker compose -f docker-compose-quickstart.yml up -d
    
  2. Exiba as imagens criadas usando o comando docker images.

    docker images
    

    O exemplo de saída condensado a seguir mostra as imagens criadas:

    REPOSITORY                        TAG                          IMAGE ID
    aks-store-demo-product-service    latest                       72f5cd7e6b84
    aks-store-demo-order-service      latest                       54ad5de546f9
    aks-store-demo-store-front        latest                       1125f85632ae
    rabbitmq                          3.13.2-management-alpine     b1dafc50c098
    ...
    
  3. Exiba os contêineres em execução usando o comando docker ps.

    docker ps
    

    A saída de exemplo condensado a seguir mostra quatro contêineres em execução:

    CONTAINER ID        IMAGE
    f27fe74cfd0a        aks-store-demo-product-service
    df1eaa137885        aks-store-demo-order-service
    b3ce9e496e96        aks-store-demo-store-front
    31df28627ffa        rabbitmq:3.13.2-management-alpine
    

Testar o aplicativo localmente

Para ver o aplicativo em execução, acesse http://localhost:8080 em um navegador da Web local. O aplicativo de exemplo é carregado, conforme mostra o exemplo a seguir:

Captura de tela mostrando o aplicativo Azure Store Front aberto em um navegador local.

Nesta página, você pode exibir produtos, adicioná-los ao carrinho e fazer um pedido.

Limpar os recursos

Como você validou a funcionalidade do aplicativo, é possível interromper e remover os contêineres em execução. Não exclua as imagens de contêiner – use-as no próximo tutorial.

  • Para interromper e remover os recursos e as instâncias do contêiner, use o comando docker-compose down.

    docker compose down
    

Próximas etapas

Neste tutorial, você criou um aplicativo de exemplo, imagens de contêiner para ele e o testou. Você aprendeu a:

  • Clonar o código-fonte de um aplicativo de exemplo do GitHub.
  • Criar uma imagem de contêiner a partir da origem do aplicativo de exemplo.
  • Testar o aplicativo de vários contêineres em um ambiente Docker local.

No próximo tutorial, você aprenderá a armazenar imagens de contêiner em um ACR.