docker-compose - 如何通过 Azure Pipelines 将多个 Docker 映像部署到 Azure 应用服务
问题描述
我有一个 docker compose .yml 文件,用于在 Linux Azure App Service 上手动安装和运行多个 docker 映像。我的下一步是通过 Azure Pipelines 自动执行此操作,我已成功地为单个图像执行此操作;但无法弄清楚如何为同一个应用服务实例上的多个图像执行此操作。
这是在同一个应用服务实例上运行多个图像的客户端要求。如果有更好的方法,我有一些灵活性,但成本是一个因素。
我正在专门寻找要添加到我的发布管道的任务类型,以及是否有任何我可以阅读的示例或文档。到目前为止,我还没有找到任何真正符合要求的东西,但我不是 DevOps 工程师,所以我可能只是没有正确地提出这个问题。
这是我拥有的 docker compose yml 文件的示例。
version: '3.7'
services:
exampleapi:
image: examplecontainerregistry.azurecr.io/example.api:latest
container_name: example.api
volumes:
- example:/mnt/example
- common:/mnt/common
certprojectservice:
image: examplecontainerregistry.azurecr.io/example.certproject.service:latest
container_name: example.certproject.service
volumes:
- example:/mnt/example
- common:/mnt/common
unityemailservice:
image: examplecontainerregistry.azurecr.io/example.email.service:latest
container_name: example.email.service
volumes:
- example:/mnt/example
- common:/mnt/common
eventconsumerservice:
image: examplecontainerregistry.azurecr.io/example.eventconsumers.service:latest
container_name: example.eventconsumers.service
volumes:
- example:/mnt/example
- common:/mnt/common
webhookresponseservice:
image: examplecontainerregistry.azurecr.io/example.webhookresponse.service:latest
container_name: example.webhookresponse.service
volumes:
- example:/mnt/example
- common:/mnt/common
unitywebhooksservice:
image: examplecontainerregistry.azurecr.io/example.webhooks.service:latest
container_name: example.webhooks.service
volumes:
- example:/mnt/example
- common:/mnt/common
解决方案
不确定我使用的方法是否适合您,但您可以检查一下。
1)要在一个 Azure 应用服务实例中运行多个 docker 映像,首先我需要使我的 Azure 应用服务类型可用于Docker-Compose:
注意:由于我的图像存储在 ACR 中,因此我在此处将此 Azure 应用服务连接到我使用的 ACR。
2)上传docker-compose.yml
到该配置。
3)第三步,也是非常有意义的一步,开启持续部署。这一步的意义在于一旦有新的图像被推送到与当前应用服务连接的ACR。它会自动从 ACR 中获取最新的镜像,然后按照配置的 docker-compose 文件进行部署。
启用Continuous Deployment后,点击show url获取 wehhook URL:
4) Go ACR
,然后Webhooks
从左侧面板中选择。Add
=> 输入webhook URL
我们从 AppService 复制到Service URL
. 保存。
现在,每次将新版本的映像推送到ACR
时,Azure 应用服务都会触发使用最新映像重新部署容器。而且我不需要在 azure devops 中配置带有部署任务的管道。
推荐阅读
- mips - 在 MIPS 中使用 $0 作为目的地的目的是什么
- c# - 手动登录后如何使 Chrome Headless
- ruby-on-rails-4 - PG::ConnectionBad:将 rails 从 4.2 升级到 5.2 后连接关闭
- php - 按下 HTML 按钮时停止页面刷新?
- c# - 如何将数据从数据库加载到列表框
- wpf - 在 WPF 中显示大文本文件而不将其读入内存
- javascript - OOP Javascript,获取类的属性而不是事件e
- yocto - 使用 Yocto 锁定软件包版本
- vue.js - vuetify 扩展面板箭头图像不显示
- javascript - 为什么 .forEach 返回未定义?