为Azure多容器应用程序(多个存储库)设置Azure管道

时间:2018-12-12 05:40:30

标签: azure docker-compose azure-devops azure-web-app-service azure-container-service

我目前有一个Web应用程序,分为三个部分。每个部分都有自己的git存储库。

  1. 前端角(foo.bar)
  2. 后端角度(foo.bar/admin)
  3. .NET Core API(foo.bar/api)

位于前面的NGINX服务器充当反向代理。目前,它们都与Jenkins服务器一起在VM上运行,这使我能够分别开发和部署我非常喜欢的每个部分。

我想对应用程序进行容器化,然后将其移至Azure Web Service for Containers。对于CD / CI,我想使用Azure DevOps和Azure Pipelines。由于Azure容器Web服务通过Docker Compose和Kubernetes支持多容器。

主要问题是: 如何在多容器(通过Docker Compose)环境中构建和部署一个特定的容器(例如Azure / frontend:10)? (不构建其他所有容器)

如果可能的话...

  • 如何设置Azure Pipelines和Azure容器注册表以允许我单独进行容器部署
  • docker-compose文件存放在哪里?在单独的存储库中?
  • 反向代理NGINX Dockerfile在哪里?还是在单独的存储库中?

还是我需要使用Kubernetes?

或者,我可以在同一服务计划上使用三个不同的App Web,并按每个域/子域对其进行控制。

  1. 前端角(foo.bar)
  2. 后端角度(admin.foo.bar)
  3. .NET Core API(api.foo.bar)

我不知道从哪里开始。这也是一个小项目。我不想让它变得太复杂。

任何提示都值得欢迎。 预先感谢!

2 个答案:

答案 0 :(得分:2)

我没有使用Azure Pipelines的经验,但是对于Azure Container Registry和Azure Web App for Container有一些想法。

首先,如果您只想通过Docker compose在多容器中构建一个特定的容器,则可以在tutorial中进行设置:

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

compose也可以与文件中设置的一个容器一起使用。

第二,撰写文件可以在您运行命令以创建用于容器的Web App的任何地方。例如,您可以使用存储在本地计算机中的撰写文件在本地计算机中运行CLI命令。

第三,如果您将Azure Web App用于容器,则应在存储库中准备好docker映像,例如Azure容器注册表。它不像在本地计算机上安装docker compose一样。

AKS也是一个不错的选择。您可以一一创建服务,也可以在一个yaml文件中全部设置它们。非常灵活。

希望这会对您有所帮助。如果您需要有关AKS或ACR的更多帮助,请给出消息。

答案 1 :(得分:0)

您可以使用容器注册表,该注册表将允许您使用docker构建每个单独的容器。然后,您可以使用容器注册表中的容器来部署多容器应用。

构建容器文件遵循标准方法,使您可以复制configure等。构建完成后,您可以通过如下标记它们来推送它们:container_registry_name/container_name:{{.Run.ID}}

我建议根据提供的示例使用生产数据库而不是容器,因为我遇到了在容器重启时重置db数据的问题。文件卷可以通过以下方式持久保存:

  • $ {WEBAPP_STORAGE_HOME} / something / another:/ var / www / html

用于容器的Docker-Compose不允许(当前)允许您在azure管道中使用build作为其仅用于部署的目的

首先需要构建dockerfile,然后在docker-compose.yml中引用新存储的容器注册表映像。另外请注意,您不能简单地在同一撰写文件中引用docker hub镜像和容器注册表镜像。您需要拉出容器并对其进行标记或构建并对其进行标记,以这种方式使用它。您可以使用容器注册表图像或公共图像。

为了使您的应用程序能够连接到这些图像,您需要将此图像添加到您的应用程序设置中,并在容器注册表服务中允许管理员:

 DOCKER_REGISTRY_SERVER_USERNAME = [azure-container-registry-name]
 DOCKER_REGISTRY_SERVER_URL = [azure-container-registry-name].azurecr.io
 DOCKER_REGISTRY_SERVER_PASSWORD = [password]

设置完基本的应用程序后,您就可以配置持续集成选项以进行进一步的开发,例如webhooks,构建选项等。