使用哪些 azure 服务(AKS 或 App 服务)在 azure 上部署多个 docker 容器(启用组合)
Which azure services to use ( AKS or App service) to deploy multiple docker containers (compose enabled) on azure
我正在尝试在 Azure 云上部署多个 Web 应用程序容器,以实施 CI/CD 生产环境的管道部署。
目前,我已经使用 docker compose 文件构建了多个容器镜像,该文件在本地主机环境中运行良好。
我尝试将 docker 图像部署到 azure 容器注册表并 运行 它们使用 azure web 应用程序服务,但它失败并给出错误“无法在 ACI 上映射容器端口” .貌似ACI不支持端口映射!
任何人都可以建议我实施 CI/CD 多容器部署部署的具体解决方案吗?
app的技术栈:Nodejs和Angular
Docker:Docker windows 桌面(使用 Linux 容器构建映像)
云:Azure
我在 Devops 领域没有太多经验,如果有人能指导我以正确的方式为多容器 Web 应用程序实施 CI/CD 流程,那将会很有帮助。
感谢您的宝贵时间!
Docker 撰写文件:
version: "3.4"
services:
frontend:
build: ./frontend
ports:
- "85:80"
expose:
- "85"
- "80"
networks:
- dev_network
depends_on:
- backend
backend:
build: ./backend
ports:
- "3000:8600"
expose:
- "3000"
- "8600"
networks:
- dev_network
networks:
dev_network:
driver: bridge
前端 Docker 文件:
# Stage 1: Compile and Build angular codebase
# Use official node image as the base image
FROM node:latest as build
# Set the working directory
WORKDIR /usr/local/app
# Add the source code to app
COPY ./ /usr/local/app/
# Install all the dependencies
RUN npm install
# Stage 2: Serve app with nginx server
FROM nginx:latest
COPY --from=build /usr/local/app/dist/ClientServicePortal /usr/share/nginx/html
# Expose port 80
EXPOSE 80
后端Docker文件:
FROM node:14-alpine
ENV NODE_ENV=production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm install --production --silent && mv node_modules ../
COPY . .
EXPOSE 3000 8600
CMD ["node", "server.js"]
我不是专家,但我认为这取决于您的应用程序需要哪种 infra/traffic。
AKS 允许您在集群内设置缩放、负载平衡、流量控制。
如果您使用的是 Azure DevOps 工具,另一个优势是 AKS 作为预览版“部署中心(预览版)”中的一项新功能。此功能将基于存储库创建 CI 和 CD。
这是一个很好的帮助,开始并看到它工作,之后你可以跳入 config/settings 并使用它:)
编辑:您的 docker 撰写将被 K8s 清单取代,但设置起来“容易”
作为 by-default 建议,以下是本指南中推荐的主要标准:
单个单体应用:选择 Azure App Service
N-Tier 应用程序:如果您有一个或几个 back-end 服务,请选择协调器,例如 Azure Kubernetes 服务 (AKS) 或应用程序服务
微服务:为容器选择 AKS 或 Azure Web 应用程序
无服务器函数和事件处理程序:选择 Azure Functions
Large-scale 批处理:选择 Azure Batch
AKS 与 Azure 应用服务
Azure 应用服务:
优点
- 设置起来非常容易
- Built-in 与 Azure DevOps 集成
- 与用 .NET/.NET Core 编写的应用程序完美配合
- 无管理开销(即不需要系统管理员 activity)
缺点
- 每个 API 都需要自己的 Azure DevOps 管道设置自己的 ARM/Terraform 模板自定义模板、应用程序设置和机密设置。
- 它仅在 Azure 中可用。即使它利用 docker 容器,使用 Azure AppService 也需要 Azure 培训。
- 无法限制 AppService 中内存和 CPU 服务的消耗。
- 在定价方面,AKS 是赢家,与 Azure AppService 相比,平均成本节省 30%。
- 应用服务是 Microsoft Azure 的遗留技术——自 2017 年以来没有重大公告或博客文章。
Azure Kubernetes 服务:
优点
- 无需部署 ARM 模板。
- AKS“推出”过程比应用服务中的 Web 部署过程快得多。
- 此外,借助滚动部署、就绪性和活性探测等功能,在 AKS 中实现“zero-downtime”部署要简单得多。
- 更简单CI/CD
- 可以控制CPU,pod 中每个容器的内存
- 自动:可以使用水平pod自动缩放器自动缩放pods的副本数,或者使用集群自动缩放器缩放集群的节点数。 Kubernetes 还可以通过分析 CPU 和 pods 使用垂直 pod 自动缩放器分析内存消耗来向上或向下调整每个 pod 的资源。遗憾的是,AKS 尚不支持此功能。
- 大多数云提供商都提供 Kubernetes。如果需要,可以将 Azure Kubernetes 服务中的工作负载 运行 移动到其他 Kubernetes 提供商,例如 Google Kubernetes Engine (GKE) 或 Amazon EKS。
- 在定价方面,AKS 是赢家,与 Azure AppService 相比,平均成本节省 30%。
缺点
- 陡峭的学习曲线。
- 需要学习 kubernetes 术语、kubectl 等
来源:
https://spltech.co.uk/azure-appservice-vs-azure-kubernetes-service/
我正在尝试在 Azure 云上部署多个 Web 应用程序容器,以实施 CI/CD 生产环境的管道部署。 目前,我已经使用 docker compose 文件构建了多个容器镜像,该文件在本地主机环境中运行良好。 我尝试将 docker 图像部署到 azure 容器注册表并 运行 它们使用 azure web 应用程序服务,但它失败并给出错误“无法在 ACI 上映射容器端口” .貌似ACI不支持端口映射!
任何人都可以建议我实施 CI/CD 多容器部署部署的具体解决方案吗?
app的技术栈:Nodejs和Angular
Docker:Docker windows 桌面(使用 Linux 容器构建映像)
云:Azure
我在 Devops 领域没有太多经验,如果有人能指导我以正确的方式为多容器 Web 应用程序实施 CI/CD 流程,那将会很有帮助。
感谢您的宝贵时间!
Docker 撰写文件:
version: "3.4"
services:
frontend:
build: ./frontend
ports:
- "85:80"
expose:
- "85"
- "80"
networks:
- dev_network
depends_on:
- backend
backend:
build: ./backend
ports:
- "3000:8600"
expose:
- "3000"
- "8600"
networks:
- dev_network
networks:
dev_network:
driver: bridge
前端 Docker 文件:
# Stage 1: Compile and Build angular codebase
# Use official node image as the base image
FROM node:latest as build
# Set the working directory
WORKDIR /usr/local/app
# Add the source code to app
COPY ./ /usr/local/app/
# Install all the dependencies
RUN npm install
# Stage 2: Serve app with nginx server
FROM nginx:latest
COPY --from=build /usr/local/app/dist/ClientServicePortal /usr/share/nginx/html
# Expose port 80
EXPOSE 80
后端Docker文件:
FROM node:14-alpine
ENV NODE_ENV=production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm install --production --silent && mv node_modules ../
COPY . .
EXPOSE 3000 8600
CMD ["node", "server.js"]
我不是专家,但我认为这取决于您的应用程序需要哪种 infra/traffic。
AKS 允许您在集群内设置缩放、负载平衡、流量控制。 如果您使用的是 Azure DevOps 工具,另一个优势是 AKS 作为预览版“部署中心(预览版)”中的一项新功能。此功能将基于存储库创建 CI 和 CD。 这是一个很好的帮助,开始并看到它工作,之后你可以跳入 config/settings 并使用它:)
编辑:您的 docker 撰写将被 K8s 清单取代,但设置起来“容易”
作为 by-default 建议,以下是本指南中推荐的主要标准:
单个单体应用:选择 Azure App Service N-Tier 应用程序:如果您有一个或几个 back-end 服务,请选择协调器,例如 Azure Kubernetes 服务 (AKS) 或应用程序服务 微服务:为容器选择 AKS 或 Azure Web 应用程序 无服务器函数和事件处理程序:选择 Azure Functions Large-scale 批处理:选择 Azure Batch
AKS 与 Azure 应用服务
Azure 应用服务:
优点
- 设置起来非常容易
- Built-in 与 Azure DevOps 集成
- 与用 .NET/.NET Core 编写的应用程序完美配合
- 无管理开销(即不需要系统管理员 activity)
缺点
- 每个 API 都需要自己的 Azure DevOps 管道设置自己的 ARM/Terraform 模板自定义模板、应用程序设置和机密设置。
- 它仅在 Azure 中可用。即使它利用 docker 容器,使用 Azure AppService 也需要 Azure 培训。
- 无法限制 AppService 中内存和 CPU 服务的消耗。
- 在定价方面,AKS 是赢家,与 Azure AppService 相比,平均成本节省 30%。
- 应用服务是 Microsoft Azure 的遗留技术——自 2017 年以来没有重大公告或博客文章。
Azure Kubernetes 服务:
优点
- 无需部署 ARM 模板。
- AKS“推出”过程比应用服务中的 Web 部署过程快得多。
- 此外,借助滚动部署、就绪性和活性探测等功能,在 AKS 中实现“zero-downtime”部署要简单得多。
- 更简单CI/CD
- 可以控制CPU,pod 中每个容器的内存
- 自动:可以使用水平pod自动缩放器自动缩放pods的副本数,或者使用集群自动缩放器缩放集群的节点数。 Kubernetes 还可以通过分析 CPU 和 pods 使用垂直 pod 自动缩放器分析内存消耗来向上或向下调整每个 pod 的资源。遗憾的是,AKS 尚不支持此功能。
- 大多数云提供商都提供 Kubernetes。如果需要,可以将 Azure Kubernetes 服务中的工作负载 运行 移动到其他 Kubernetes 提供商,例如 Google Kubernetes Engine (GKE) 或 Amazon EKS。
- 在定价方面,AKS 是赢家,与 Azure AppService 相比,平均成本节省 30%。
缺点
- 陡峭的学习曲线。
- 需要学习 kubernetes 术语、kubectl 等
来源:
https://spltech.co.uk/azure-appservice-vs-azure-kubernetes-service/