在 Azure 中部署容器集群

时间:2021-04-20 17:31:40

标签: azure docker docker-compose dask dask-distributed

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

服务的名称是“worker”,我像这样启动了两个容器实例:

docker compose up --scale worker=2

我在 Azure 上部署了映像,当我运行 docker compose(使用我在 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

3 个答案:

答案 0 :(得分:2)

您在这里需要的是 Azure Kubernetes 服务或 Azure Webapps for Containers。两者都将负责从 ACR 获取 Docker 映像,然后在一组机器上分发。

这是选择您的compute service

的决策树

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

AKS - 大规模容器部署,这里的很大一部分是多容器编排平台。看看这个example

答案 1 :(得分:1)

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

docker compose up --scale worker=2

我在此链接中遇到了缩放容器的问题 https://github.com/docker/compose/issues/3722

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

答案 2 :(得分:1)

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

如果您想拥有一个容器的多个副本,那么我建议您使用 AKS,它更适合您的目的。