教程 - 為 Azure Kubernetes Service(AKS)準備應用程式

在本教學課程中,您會準備多容器應用程式以在 Kubernetes 中使用。 您可以使用 Docker Compose 等現有開發工具,在本機組建及測試應用程式。 您將學習如何:

  • 從 GitHub 複製一個範例應用程式來源。
  • 從範例應用程式來源建立容器映像。
  • 在本機 Docker 環境中測試多容器應用程式。

完成後,就可在本機開發環境中執行下列應用程式:

截圖,顯示Azure Store Front App 在本地瀏覽器中運行。

在後續教學中,你會將容器映像上傳到 Azure Container Registry(ACR),然後部署到 AKS 叢集。

開始之前

本教學課程假設使用者對核心 Docker 概念有基本認識,例如容器、容器映像和 docker 命令。 如需容器基本概念的入門參考資料,請參閱開始使用 Docker

若要完成此教學課程,您需要一個執行 Linux 容器的本機 Docker 開發環境。 Docker 提供套件,可在 MacWindowsLinux 系統上配置 Docker。

注意

Azure Cloud Shell 並未包含完成這些教學步驟所需的 Docker 元件。 因此,我們建議使用完整的 Docker 開發環境。


取得應用程式程式碼

本教學中使用的範例應用程式是一個基本的商店前台應用程式,包含以下 Kubernetes 部署與服務:

Azure商店範例架構截圖。

  • 市集前端:供客戶檢視產品和下單的 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
    

在本機測試應用程式

若要查看執行中的應用程式,請流覽至本機網頁瀏覽器中的 http://localhost:8080。 系統會載入範例應用程式,如下列範例所示:

截圖顯示 Azure 商店首頁應用程式在本地瀏覽器中開啟。

在此頁面上,您可以檢視產品、將其新增至購物車,然後下訂單。

清除資源

由於您已驗證應用程式的功能,因此您可以停止並移除執行中的容器。 不要因為下次教學會用到容器圖片就刪除它們。

使用 docker compose down 命令停止並移除容器執行個體和資源。

docker compose down

Azure 開發人員 CLI 命令

當您使用 azd 時,沒有手動容器映像相依性。 azd 使用與 Docker 類似的 azd upazd down 命令來處理應用程式和叢集的佈建、部署和清除。

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 範本來建立叢集。