在本教程中,我们准备一个在 Kubernetes 中使用的多容器应用程序。 使用 Docker Compose 之类的现有开发工具在本地生成和测试应用程序。 学习如何:
- 克隆 GitHub 中的示例应用程序源。
- 根据示例应用程序源创建容器映像
- 在本地 Docker 环境中测试多容器应用程序。
完成后,以下应用程序会在本地开发环境中运行:
在后面的教程中,将此容器映像上传到 Azure 容器注册表 (ACR),然后部署到 AKS 群集中。
开始之前
本教程假定你基本了解核心 Docker 概念,如容器、容器映像和 docker 命令。 有关容器的入门基础知识,请参阅 Docker 入门。
若要完成本教程,需要运行 Linux 容器的本地 Docker 开发环境。 Docker 提供的包可在 Mac、Windows 或 Linux 系统上配置 Docker。
注意
Azure 本地 Shell 不包含完成这些教程的每个步骤所需的 Docker 组件。 因此,我们建议使用完整的 Docker 开发环境。
获取应用程序代码
本教程中使用的示例应用程序是一个基本的应用商店前端应用,包括以下 Kubernetes 部署和服务:
- 门店:Web 应用程序,供客户查看产品和下单。
- 产品服务:显示产品信息。
- 订单服务:下单。
- Rabbit MQ:订单队列的消息队列。
- 使用 git 可将示例应用程序克隆到开发环境。 - git clone https://github.com/Azure-Samples/aks-store-demo.git
- 切换到克隆目录。 - cd aks-store-demo
查看 Docker Compose 文件
你在本教程中创建的示例应用程序使用存储库中你克隆的 docker-compose-quickstart YAML 文件。
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
创建容器映像并运行应用程序
可以使用 Docker Compose 自动生成容器映像和部署多容器应用程序。
Docker
- 创建容器映像,下载 RabbitMQ 映像,并使用 - docker compose命令启动应用程序:- docker compose -f docker-compose-quickstart.yml up -d
- 使用 - docker images命令查看创建的映像。- docker images- 以下精简示例输出显示了创建的映像: - 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 ...
- 使用 - docker ps命令查看正在运行的容器。- docker ps- 以下精简示例输出显示了四个正在运行的容器: - 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
在本地测试应用程序
若要查看正在运行的应用程序,请导航到本地 Web 浏览器中的 http://localhost:8080。 示例应用程序会加载,如以下示例所示:
在此页上,可以查看产品,将其添加到购物车,然后下订单。
清理资源
由于你验证了应用程序的功能,因此可以停止和删除正在运行的容器。 请勿删除容器映像 - 将在下一个教程中使用它们。
- 使用 - docker-compose down命令停止和删除容器实例和资源。- docker compose down
后续步骤
在本教程中,你创建了一个示例应用程序,为该应用程序创建了容器映像,然后测试了该应用程序。 你已了解如何执行以下操作:
- 克隆 GitHub 中的示例应用程序源。
- 根据示例应用程序源创建容器映像
- 在本地 Docker 环境中测试多容器应用程序。
下一个教程介绍如何在 ACR 中存储容器映像。
 
              
              