在本教學課程中,您會準備多容器應用程式以在 Kubernetes 中使用。 您可以使用 Docker Compose 等現有開發工具,在本機組建及測試應用程式。 您將學習如何:
- 從 GitHub 複製一個範例應用程式來源。
- 從範例應用程式來源建立容器映像。
- 在本機 Docker 環境中測試多容器應用程式。
完成後,就可在本機開發環境中執行下列應用程式:
在後續教學中,你會將容器映像上傳到 Azure Container Registry(ACR),然後部署到 AKS 叢集。
開始之前
本教學課程假設使用者對核心 Docker 概念有基本認識,例如容器、容器映像和 docker 命令。 如需容器基本概念的入門參考資料,請參閱開始使用 Docker。
若要完成此教學課程,您需要一個執行 Linux 容器的本機 Docker 開發環境。 Docker 提供套件,可在
注意
Azure Cloud Shell 並未包含完成這些教學步驟所需的 Docker 元件。 因此,我們建議使用完整的 Docker 開發環境。
取得應用程式程式碼
本教學中使用的範例應用程式是一個基本的商店前台應用程式,包含以下 Kubernetes 部署與服務:
- 市集前端:供客戶檢視產品和下單的 Web 應用程式。
- 產品服務:顯示產品資訊。
- 訂單服務:下單。
- RabbitMQ:用於訂單佇列的訊息佇列。
在電腦上建立一個目錄,然後在終端機會話中切換到該目錄,就像 Bash 一樣。 這個例子使用了一個名為 demorepo 的目錄,但你可以使用任何你想要的名字。
mkdir demorepo cd demorepo使用 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,將容器映像和多容器應用程式的部署自動化。
建立容器映像、下載 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
在本機測試應用程式
若要查看執行中的應用程式,請流覽至本機網頁瀏覽器中的 http://localhost:8080。 系統會載入範例應用程式,如下列範例所示:
在此頁面上,您可以檢視產品、將其新增至購物車,然後下訂單。
清除資源
由於您已驗證應用程式的功能,因此您可以停止並移除執行中的容器。 不要因為下次教學會用到容器圖片就刪除它們。
使用 docker compose down 命令停止並移除容器執行個體和資源。
docker compose down
Azure 開發人員 CLI 命令
當您使用 azd 時,沒有手動容器映像相依性。
azd 使用與 Docker 類似的 azd up 和 azd down 命令來處理應用程式和叢集的佈建、部署和清除。
在 infra 的 azure.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 範本來建立叢集。