你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
教程 - 准备用于 Azure Kubernetes 服务 (AKS) 的应用程序
在本教程(一个包含 7 部分内容的系列的第 1 部分)中,我们准备一个要在 Kubernetes 中使用的多容器应用程序。 使用 Docker Compose 之类的现有开发工具在本地生成和测试应用程序。 学习如何:
- 克隆 GitHub 中的示例应用程序源。
- 根据示例应用程序源创建容器映像
- 在本地 Docker 环境中测试多容器应用程序。
完成后,以下应用程序会在本地开发环境中运行:
在后面的教程中,将此容器映像上传到 Azure 容器注册表 (ACR),然后部署到 AKS 群集中。
本教程假定你基本了解核心 Docker 概念,如容器、容器映像和 docker
命令。 有关容器的入门基础知识,请参阅 Docker 入门。
若要完成本教程,需要运行 Linux 容器的本地 Docker 开发环境。 Docker 提供的包可在 Mac、Windows 或 Linux 系统上配置 Docker。
备注
Azure Cloud Shell 不包含完成这些教程的每个步骤所需的 Docker 组件。 因此,我们建议使用完整的 Docker 开发环境。
本教程中使用的示例应用程序是一个基本的应用商店前端应用,包括以下 Kubernetes 部署和服务:
- 门店:Web 应用程序,供客户查看产品和下单。
- 产品服务:显示产品信息。
- 订单服务:下单。
- Rabbit MQ:订单队列的消息队列。
使用 git 可将示例应用程序克隆到开发环境。
git clone https://github.com/Azure-Samples/aks-store-demo.git
切换到克隆目录。
cd aks-store-demo
如果在本地使用 azd
,请创建名为 aks-store-demo
的空目录来托管 azd 模板文件。
mkdir aks-store-demo
更改到新目录以从 azd 模板加载所有文件。
cd aks-store-demo
使用 [azd init
][azd-init] 命令将示例应用程序克隆到 aks-store-demo
目录中,并将 --template
标志设置为 aks-store-demo
。
azd init --template aks-store-demo
你在本教程中创建的示例应用程序使用存储库中你克隆的 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
若要查看正在运行的应用程序,请导航到本地 Web 浏览器中的 http://localhost:8080
。 示例应用程序会加载,如以下示例所示:
在此页上,可以查看产品,将其添加到购物车,然后下订单。
由于你验证了应用程序的功能,因此可以停止和删除正在运行的容器。 请勿删除容器映像 - 将在下一个教程中使用它们。
使用 azd
时,没有手动容器映像依赖项。 azd
使用 azd up
和 azd down
命令处理应用程序和群集的预配、部署和清理,与 Docker 类似。
可以在 azure.yaml
的 infra
部分中自定义在部署群集之前使用 Terraform 或 Bicep 的准备步骤。 默认情况下,此项目使用 Terraform:
infra:
provider: terraform
path: infra/terraform
如果要将提供程序更改为 Bicep,请按如下所示更新 azure.yaml
文件:
infra:
provider: bicep
path: infra/bicep
在本教程中,你创建了一个示例应用程序,为该应用程序创建了容器映像,然后测试了该应用程序。 你已了解如何执行以下操作:
- 克隆 GitHub 中的示例应用程序源。
- 根据示例应用程序源创建容器映像
- 在本地 Docker 环境中测试多容器应用程序。
下一个教程介绍如何在 ACR 中存储容器映像。
本教程使用 azd
克隆了一个示例应用程序。 你已了解如何执行以下操作:
- 克隆 GitHub 中的示例
azd
模板。
- 查看在示例应用程序源中使用容器映像的位置。
下一个教程将介绍如何使用你克隆的 azd
模板创建群集。