在 Azure 中部署容器集群

Deploying a cluster of containers in Azure

我有一个 Docker 应用程序,它在 Windows 我的笔记本电脑上运行良好,使用 compose 并启动容器的多个实例作为 Dask 集群。

服务的名称是“worker”,我启动了两个容器实例,如下所示:

docker compose up --scale worker=2

我在 Azure 上部署了图像,当我 运行 docker 组合时(使用我在 Windows 中使用的相同命令)仅 一个 容器已启动。

如何在Azure中部署容器集群?我可以使用 docker compose 还是我需要采用不同的方法,例如使用模板或 Kubernetes 进行部署?

这是 docker-compose.yml 文件:

version: "3.0"
services:

  web:
    image: sofacr.azurecr.io/pablo:job2_v1
    volumes:
      - daskvol:/code/defaults_prediction      
    ports:
      - "5000:5000"
    environment:
      - SCHEDULER_ADDRESS=scheduler
      - SCHEDULER_PORT=8786
    working_dir: /code
    entrypoint:
      - /opt/conda/bin/waitress-serve
    command:
      - --port=5000
      - defaults_prediction:app

  scheduler:
    image: sofacr.azurecr.io/pablo:job2_v1
    ports:
      - "8787:8787"
    entrypoint:
      - /opt/conda/bin/dask-scheduler

  worker:
    image: sofacr.azurecr.io/pablo:job2_v1
    depends_on:
      - scheduler
    environment:
      - PYTHONPATH=/code
      - SCHEDULER_ADDRESS=scheduler
      - SCHEDULER_PORT=8786
    volumes:
      - daskvol:/code/defaults_prediction
      - daskdatavol:/data
      - daskmodelvol:/model
    entrypoint:
      - /opt/conda/bin/dask-worker
    command:
      - scheduler:8786
      
volumes:
  daskvol:
    driver: azure_file
    driver_opts:
     share_name: daskvol-0003
     storage_account_name: sofstoraccount
  daskdatavol:
    driver: azure_file
    driver_opts:
     share_name: daskdatavol-0003
     storage_account_name: sofstoraccount
  daskmodelvol:
    driver: azure_file
    driver_opts:
     share_name: daskmodelvol-0003
     storage_account_name: sofstoraccount

我也是 docker 的新手。但据我所知,编排容器或扩大容器通常使用 docker 群或 kubernetes。在 Azure kuberenetes 集群中是 AKS。

docker compose up --scale worker=2

我在这个 link 中遇到了缩放容器的问题 https://github.com/docker/compose/issues/3722

How to simply scale a docker-compose service and pass the index and count to each? 希望这可能有所帮助。

现在 ACI 支持从 docker-compose.yaml 文件部署,但它不支持扩展到同一容器的多个副本。因为ACI不支持端口映射,一个端口只能为一个容器暴露一次。所以只能通过docker-compose在一个容器组中创建多个容器。 yaml 文件,每个容器有一个副本。

如果你想拥有一个容器的多个副本,那我推荐你使用AKS,它更适合你的目的。

这里你需要的是 Azure Kubernetes Service 或 Azure Webapps for Containers。两者都将负责从 ACR 获取 Docker 图像,然后分发到一组机器上。

这是一个决策树来选择你的 compute service

容器实例 - 小型、快速、无服务器容器托管服务 - 通常适合小型容器部署,我倾向于使用它来生成临时后台作业

A​​KS - 大规模容器部署,其中很大一部分是多容器编排平台。看看这个example