Tutorial: Preparación de una aplicación para Azure Kubernetes Service (AKS)

En este tutorial, preparará una aplicación de varios contenedores para usarla en Kubernetes. Puede usar herramientas de desarrollo existentes, como Docker Compose, para compilar y probar la aplicación localmente. Aprenderá a:

  • Clona un código fuente de aplicación de ejemplo de GitHub.
  • Crear una imagen de contenedor a partir del origen de la aplicación de ejemplo.
  • Probar la aplicación con varios contenedores en un entorno local de Docker.

Tras finalizar, la siguiente aplicación se ejecuta en su entorno de desarrollo local:

Screenshot que muestra la aplicación front-end de Azure Store que se ejecuta localmente abierta en un explorador web local.

En tutoriales posteriores, cargará la imagen de contenedor en un Azure Container Registry (ACR) y, a continuación, la implementará en un clúster de AKS.

Antes de empezar

En este tutorial se asume que el usuario tiene un conocimiento básico de los principales conceptos de Docker, como los contenedores, las imágenes de contenedor y los comandos de docker. Para una introducción a los conceptos básicos de los contenedores, consulte Introducción a Docker.

Para completar este tutorial, se necesita un entorno de desarrollo de Docker local en el que se ejecuten contenedores Linux. Docker proporciona paquetes que configuran Docker en un sistema Mac, Windows o Linux.

Nota:

Azure Cloud Shell no incluye los componentes de Docker necesarios para completar todos los pasos de estos tutoriales. Por lo tanto, se recomienda usar un entorno completo de desarrollo de Docker.


Obtención del código de la aplicación

La aplicación sample que se usa en este tutorial es una aplicación front-end de la tienda básica, incluidas las siguientes implementaciones y servicios de Kubernetes:

Captura de pantalla de la arquitectura de muestra de Azure Store.

  • Tienda virtual: aplicación web en línea para que los clientes vean productos y realicen pedidos.
  • Servicio de producto: muestra información del producto.
  • Servicio de pedidos: realiza pedidos.
  • Rabbit MQ: cola de mensajes para gestionar pedidos.
  1. Cree un directorio en su ordenador y conéctese a ese directorio en su sesión de terminal de comandos, como Bash. En este ejemplo se usa un directorio denominado demorepo , pero puede usar cualquier nombre que desee.

    mkdir demorepo
    cd demorepo
    
  2. Usa git para clonar la aplicación de muestra en tu entorno de desarrollo.

    git clone https://github.com/Azure-Samples/aks-store-demo.git
    
  3. Cambie al directorio clonado.

    cd aks-store-demo
    

Revisión del archivo de Docker Compose

La aplicación de ejemplo que se crea en este tutorial usa el archivo YAML docker-compose-quickstart del repositorio que ha clonado.

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

Creación de imágenes de contenedor y ejecución de la aplicación

Se puede utilizar Docker Compose para automatizar la creación de imágenes de contenedor y la implementación de aplicaciones con varios contenedores.

Docker

  1. Cree la imagen de contenedor, descargue la imagen rabbitMQ e inicie la aplicación con el comando docker compose :

    docker compose -f docker-compose-quickstart.yml up -d
    
  2. Vea las imágenes creadas mediante el comando docker images.

    docker images
    

    En la siguiente salida de ejemplo reducida se muestran las imágenes creadas:

    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
    ...
    
  3. Vea los contenedores en ejecución mediante el comando docker ps.

    docker ps
    

    En la salida de ejemplo condensada siguiente se muestran cuatro contenedores en ejecución:

    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
    

Prueba local de la aplicación

Para ver la aplicación en ejecución, vaya a http://localhost:8080 en un explorador web local. Se carga la aplicación de ejemplo, como se muestra en el ejemplo siguiente:

Screenshot que muestra la aplicación front-end de Azure Store abierta en un explorador local.

En esta página, puede ver los productos, agregarlos al carro y, a continuación, realizar un pedido.

Limpieza de recursos

Puesto que validó la funcionalidad de la aplicación, puede detener y quitar los contenedores en ejecución. No elimine las imágenes de contenedor porque las usa en el siguiente tutorial.

Para detener y quitar las instancias de contenedor y los recursos, use el comando docker-compose down.

docker compose down

Pasos siguientes

En este tutorial, ha creado una aplicación de ejemplo e imágenes de contenedor para la aplicación y, después, ha probado la aplicación. Ha aprendido a:

  • Clona un código fuente de aplicación de ejemplo de GitHub.
  • Crear una imagen de contenedor a partir del origen de la aplicación de ejemplo.
  • Probar la aplicación con varios contenedores en un entorno local de Docker.

En el siguiente tutorial, aprenderá cómo almacenar imágenes de contenedor en un ACR.