我有一个 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
答案 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,它更适合您的目的。