我有一个运行App Service的多容器应用程序-容器Web应用程序。只要在“容器设置”标签下提供了Docker Compose(预览)配置,一切都可以正常工作。
当前,我正在使用Azure DevOps为特定容器创建生成,然后使用“容器设置”下的连续部署选项(在Azure门户中)从ACR中提取最新的已部署容器映像。这也很好。我可以为单个容器运行构建,并且仅部署特定容器,而不会影响Web应用程序。 (每个容器都是一个单独的项目,并且只有一个Dockerfile而不需要docker-compose)
但是,当我使用 Azure App Service Deploy (版本4. *)从Azure DevOp创建发行版时,Azure Portal中的Docker Compose(预览)配置被完全清除,并且默认情况下到单个容器,应用程序中断。需要Docker Compose配置,因为它可以使主容器了解其他容器。
我正在使用Azure App Service Deploy的版本4. *。我想使用Azure DevOps的发布功能,因为它提供了更多控制权。
有没有一种方法可以从 Azure App Service Deploy版本4 中指定docker-compose多容器配置,以便App Service知道多容器配置,而不会清除Docker Compose中的多容器配置(预览)
谢谢, 卡兰
答案 0 :(得分:2)
用Azure App Service deploy
任务替换Release
管道中的Azure Web App for Containers
任务。有多个图像的参数和一个配置文件(Docker-Compose.yml)。
答案 1 :(得分:0)
正如Dave所提到的,可以使用AzureWebAppContainer任务来实现,但是文档中没有提及有关多容器部署的选项。
我不得不深入研究该任务的源代码以发现任务参数。
我将总结我的设置,以使您了解如何使用它。我在YAML中定义了一个多阶段管道。分为两个阶段,第一阶段构建和发布Docker映像,第二阶段更新Web App for Containers应用服务。
第一阶段还生成工件,即docker-compose.yml
文件,该文件用于配置Web App for Containers应用程序服务。在我的存储库中,我有此文件的模板。在流水线执行期间,将在此模板内替换docker映像的标签(例如,使用envsubst或sed)。然后,将生成的docker-compose.yml
文件作为工件发布。
- task: PublishBuildArtifacts@1
displayName: "Publish artifact"
inputs:
pathToPublish: $(Build.SourcesDirectory)/pipelines/assets/docker-compose.yml
artifactName: yml
在管道的第二阶段,下载了工件,并将其用于配置容器的Web App。在下面的示例中,AzureWebAppContainer
是deployment job的一个步骤。
- task: AzureWebAppContainer@1
displayName: 'Azure Web App for Containers'
inputs:
azureSubscription: '<YOUR_SUBSCRIPTION>'
appName: '<YOUR_WEB_APP_FOR_CONTAINERS>'
multicontainerConfigFile: $(System.ArtifactsDirectory)/yml/docker-compose.yml
生成的docker-compose.yml
作为工件存储,您以后随时可以查阅。