BatchCompute 除了支持把软件直接安装到 ECS 镜像,还支持通过 Docker 镜像部署应用程序。
也可以自定义制作一个 Docker 镜像,上传到阿里云的容器镜像服务仓库中或者使用 registry 工具上传到阿里云 OSS,然后您可以指定您的作业的任务在这个镜像中运行。
1. BatchCompute 对 Docker 支持的原理
以 AutoCluster 模式为例,对比VM 方式
和Docker方式
的使用过程。
VM 方式。用户提交作业,每个作业可以有多个任务,每个任务指定一个镜像(支持 Linux 和 Windows);系统运行任务时,会根据指定的镜像启动VM;用户任务将运行在这个VM上;任务完成后,结果会被上传到指定的持久化存储,然后销毁 VM,准备执行下一个任务。
Docker 方式:用户提交作业运行任务时,会先启动 VM 来支持 Docker 的系统镜像(如:支持 Docker 的 Ubuntu);然后从容器镜像服务仓库或者 OSS 下载指定的 Docker 镜像,并在该 VM 中启动,用户的任务将在该 Docker 容器内运行;任务完成后,结果上传到指定的持久化存储,然后销毁 VM,准备执行下一个任务。
目前一个 VM,只支持运行一个 Docker 镜像。
# 使用VM:
---
|-- job
|-- task
|-- VM (用户指定的 VM,支持 Windows 和 Linux)
|-- program (用户程序)
# 使用Docker模式:
---
|-- job
|-- task
|-- VM (支持 docker 的 Ubuntu)
|-- Docker-Container(用户指定的 Docker 的容器镜像)
|-- program (用户程序)
2. 使用Docker和不使用Docker区别
- | 不使用 Docker | 使用 Docker |
---|---|---|
使用镜像 | 指定 ECS 镜像 ID | 指定支持 Docker Container 的 ECS 镜像 ID(例如,官网提供的 Ubuntu),还需指定自定义 Docker 镜像。 |
程序运行平台 | 支持 Windows 和 Linux | 支持 Linux |
本地调试 | 不支持本地调试 | 镜像在本地制作,支持本地调试 |
3. 安装 Docker
A) 请到 Docker 官网下载安装
- 在 Windows/Mac 上安装 toolbox 。
安装完成后会有2个快捷方式:
Kitematic: 用来管理 docker container 的图形化界面
Docker Quickstart Terminal: 可以快速启动 docker 命令行界面。
- linux 上请自行到 官网下载安装 。
注意: 确保安装的 Docker 版本 >= 1.10, 否则会有兼容问题。
B) 配置加速器
使用加速器,将会提升您在国内获取 Docker 官方镜像的速度:阿里云容器服务开发者平台 。
4. 使用 Docker 注意事项
Docker container 运行时,用户为 root,path 环境变量默认为:/sbin:/usr/sbin:/bin:/usr/bin。注意没有/usr/local/bin
PWD 环境变量如果没有设置,则为’/batchcompute/workdir’。用户的程序包始终会被解压到 /batchcompute/workdir。
使用 ClusterID 提交任务时, 因为 Docker registry 一旦启动后就不停止,因此提交到一个 cluster 中的所有 job,其 BATCH_COMPUTE_DOCKER_REGISTRY_OSS_PATH 必须相同。
目前 InputMapping,OutputMapping 不能同时挂载到同一个目录。
BatchCompute 启动 Docker 容器时使用 —privileged=false 模式,所以不允许在docker 容器中启动 docker 容器。