你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程 - 为Azure Kubernetes 服务 (AKS)准备应用程序

在本教程中,我们准备一个在 Kubernetes 中使用的多容器应用程序。 使用 Docker Compose 之类的现有开发工具在本地生成和测试应用程序。 学习如何:

  • 从GitHub克隆示例应用程序源。
  • 根据示例应用程序源创建容器映像
  • 在本地 Docker 环境中测试多容器应用程序。

完成后,以下应用程序会在本地开发环境中运行:

此截图显示 Azure Store Front 应用程序在本地浏览器中运行的情况。

在后面的教程中,将容器映像上传到 Azure 容器注册表 (ACR),然后将其部署到 AKS 群集。

开始之前

本教程假定你基本了解核心 Docker 概念,如容器、容器映像和 docker 命令。 有关容器的入门基础知识,请参阅 Docker 入门

若要完成本教程,需要运行 Linux 容器的本地 Docker 开发环境。 Docker 提供在 MacWindowsLinux 系统上配置 Docker 的包。

注意

Azure Cloud Shell不包括完成这些教程中每个步骤所需的 Docker 组件。 因此,我们建议使用完整的 Docker 开发环境。


获取应用程序代码

本教程中使用的 sample 应用程序是一个基本的应用商店前端应用,包括以下 Kubernetes 部署和服务:

Azure Store 示例架构的屏幕截图。

  • Store front:客户用于查看产品和下单的 Web 应用程序。
  • 产品服务:显示产品信息。
  • 订单服务:下单。
  • RabbitMQ:用于订单队列的消息队列。
  1. 在计算机上创建一个目录,并在终端中切换到该目录,如 Bash。 此示例使用名为 Demorepo 的目录,但可以使用所需的任何名称。

    mkdir demorepo
    cd demorepo
    
  2. 使用 git 可将示例应用程序克隆到开发环境。

    git clone https://github.com/Azure-Samples/aks-store-demo.git
    
  3. 切换到克隆目录。

    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 自动生成容器映像和部署多容器应用程序。

  1. 创建容器映像,下载 RabbitMQ 映像,并使用 docker compose 命令启动应用程序:

    docker compose -f docker-compose-quickstart.yml up -d
    
  2. 使用 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
    ...
    
  3. 使用 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。 示例应用程序会加载,如以下示例所示:

Screenshot 显示在本地浏览器中打开的 Azure Store Front App。

在此页上,可以查看产品,将其添加到购物车,然后下订单。

清理资源

由于你验证了应用程序的功能,因此可以停止和删除正在运行的容器。 不要删除容器映像, 因为在下一教程中使用这些映像。

使用 docker compose down 命令停止和删除容器实例和资源。

docker compose down

Azure开发人员 CLI 命令

使用 azd 时,没有手动容器映像依赖项。 azd 使用 azd upazd down 命令处理应用程序和群集的预配、部署和清理,与 Docker 类似。

可以在 infraazure.yaml 部分中自定义在部署群集之前使用 Terraform 或 Bicep 的准备步骤。 默认情况下,此项目使用 Terraform:

infra:
  provider: terraform
  path: infra/terraform

如果要将提供程序更改为 Bicep,请按如下所示更新 azure.yaml 文件:

infra:
  provider: bicep
  path: infra/bicep

后续步骤

Azure CLI

在本教程中,你创建了一个示例应用程序,为该应用程序创建了容器映像,然后测试了该应用程序。 你已了解如何执行以下操作:

  • 从GitHub克隆示例应用程序源。
  • 根据示例应用程序源创建容器映像
  • 在本地 Docker 环境中测试多容器应用程序。

下一个教程介绍如何在 ACR 中存储容器映像。

Azure Developer CLI

本教程使用 azd 克隆了一个示例应用程序。 你已了解如何执行以下操作:

  • 从 GitHub 克隆示例 azd 模板。
  • 查看在示例应用程序源中使用容器映像的位置。

下一个教程将介绍如何使用你克隆的 azd 模板创建群集。