教程 - 准备用于 Azure Kubernetes 服务 (AKS) 的应用程序
在本教程(一个包含 7 部分内容的系列的第 1 部分)中,我们准备一个要在 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 rabbitmq 3.13.2-management-alpine b1dafc50c098 ...
使用
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 中存储容器映像。