全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
批量计算

前言

更新时间:2017-06-07 13:26:11

BatchCompute除了支持把软件直接安装到ECS镜像,还支持通过Docker镜像部署应用程序。

您可以自定义制作一个Docker镜像,使用registry工具上传到阿里云OSS,然后您可以指定您的作业的任务在这个镜像中运行。

1. BatchCompute对Docker支持的原理

这里要和普通VM支持对比说明一下:

(1) 先说使用普通VM, 用户提交作业,每个作业可以有多个任务,每个任务指定一个镜像(支持Linux 和 Window),系统运行这个任务时,会根据指定的镜像启动VM,用户任务将运行在这个VM上。任务完成后结果会被上传到指定的OSS目录,VM销毁。然后执行下一个任务。

(2) 使用Docker:每个任务也可以指定使用一个Docker容器镜像来运行。运行task时,会先启动一个VM运行支持Docker的系统镜像(如:支持Docker的Ubuntu),然后会从OSS上下载你指定的Docker镜像,在这个VM中启动起来,用户的任务将运行在这个Docker容器内。任务完成后结果上传到指定的OSS目录,VM销毁。然后执行下一个任务。

目前一个VM,只支持运行一个Docker镜像。

  1. # 使用VM:
  2. ---
  3. |-- job
  4. |-- task
  5. |-- VM (用户指定的VM,支持WindowsLinux)
  6. |-- program (用户程序)
  7. # 使用Docker模式:
  8. ---
  9. |-- job
  10. |-- task
  11. |-- VM (支持dockerUbuntu)
  12. |-- Docker-Container(用户指定的Docker的容器镜像)
  13. |-- program (用户程序)

2. 使用Docker和不使用Docker有什么区别

- 不使用Docker 使用 Docker
使用镜像 指定ECS镜像ID 指定支持Docker Container的ECS镜像ID(官网提供的Ubuntu),还需指定自定义Docker镜像。
程序运行平台 支持Window和Linux 支持Linux
本地调试 不支持本地调试 镜像在本地制作,支持本地调试

3. 安装Docker

(1) 在 Ubuntu 上安装(推荐使用)

  1. sudo apt-get update #更新软件源
  2. sudo apt-get install docker.io #安装docker
  1. #检查是否成功
  2. sudo docker ps

可以看到类似下面的结果:

Ubuntu下安装好docker后,每次都要加sudo运行比较影响效率。有没有好办法?

您可以通过加入docker组,即可免sudo。

  1. sudo gpasswd -a ${USER} docker # 将当前用户加入docker组, 如果没有docker组,加一个:sudo groupadd docker
  2. sudo service docker restart # 重启docker服务,然后注销后重新登录系统即可

(2) 在 window/Mac 上安装

从官网下载docker toolbox:

https://www.docker.com/docker-toolbox

安装完成后会有2个快捷方式:

Kitematic: 用来管理docker container的图形化界面

Docker Quickstart Terminal: 可以快速启动 docker 命令行界面。

(3) 配置加速器

使用加速器将会提升您在国内获取Docker官方镜像的速度:阿里云容器服务开发者平台

4. 制作Docker镜像

本例中我们将制作一个 Ubuntu 镜像,内置python。镜像名称:myubuntu。

新建一个目录 dockerUbuntu,结构如下:

  1. dockerUbuntu
  2. |-- Dockerfile

文件 Dockerfile 的内容:

  1. FROM ubuntu:14.04
  2. # 这里要替换 your_name 为您的名字, 和your_email 为您的Email
  3. MAINTAINER your_name <your_email>
  4. # 更新源
  5. RUN apt-get update
  6. # 清除缓存
  7. RUN apt-get autoclean
  8. # 安装python
  9. RUN apt-get install -y python
  10. # 启动时运行这个命令
  11. CMD ["/bin/bash"]

运行以下命令,build镜像:

  1. cd dockerUbuntu #进入 dockerUbuntu 目录
  2. docker build -t myubuntu ./ #正式build, 命名为 myubuntu
  • 注意:docker 命令在ubuntu中默认需要加sudo才能运行,而在Mac/Windows中,需要从“Docker Quickstart Terminal”中启动的命令行工具中运行。

build 完成后, 运行以下命令查看:

  1. docker images

可以看到类似下面的结果:

制作docker镜像,除了Dockerfile这种方式外,还有更加直观的制作方式

5. 将docker镜像上传到OSS

使用BatchCompute Docker服务,需要将制作的Docker镜像myubuntu上传到OSS,系统将会从OSS下载这个镜像来运行您的任务程序。

(1) 安装 OSS Docker Registry 2

假设您想要将docker存储到OSS的目录路径为:

  1. oss://your-bucket/dockers/

我们将利用Docker Registry 2官方镜像创建一个私有镜像仓库,需要配置了OSS的Access Key ID, Access Key Secret, Region, Bucket等信息。

具体安装步骤如下:

先在当前目录生成文件config.yml

  1. version: 0.1
  2. log:
  3. level: debug
  4. storage:
  5. oss:
  6. accesskeyid: your_access_key_id
  7. accesskeysecret: your_access_key_secret
  8. region: oss-cn-qingdao
  9. bucket: your-bucket
  10. rootdirectory: dockers
  11. secure: false
  12. internal: false
  13. http:
  14. addr: 0.0.0.0:5000

其中的变量需要替换:

参数 描述
your_access_key_id 您的 access key id
your_access_key_secret 您的 access key secret
your-bucket 您的 bucket

关于OSS配置的详细信息请参见 Docker官方文档

然后运行下面的命令安装

  1. docker pull registry:2
  2. docker run -v `pwd`/config.yml:/etc/docker/registry/config.yml -p 5000:5000 --name registry -d registry:2
  • 注意:这里region使用 oss-cn-qingdao, 表示使用青岛region的OSS,而后面提交作业也需要提交到相应的region才能正常工作。

完成后,可以运行以下命令查看:

  1. docker ps #查看运行的container

如果成功安装,可以看到 registry:2

(2) 运行下面命令,将镜像上传到 OSS:

  1. docker tag myubuntu localhost:5000/myubuntu
  2. docker push localhost:5000/myubuntu

注意:

  1. 要用 localhost:5000/ 作为前缀,用其他的字符串上传不了。5000 端口是第(1)步中 -p 5000:5000 中(冒号前的5000)指定的。
  2. 您制作的镜像名称为 localhost:5000/myubuntu,而不是 myubuntu。

检验是否上传成功, 可以直接使用OSS控制台查看是否有这个目录: oss://your-bucket/dockers/docker/registry/v2/repositories/myubuntu/

6. 使用Docker注意事项:

  1. Docker container运行时,用户为root,path环境变量默认为:/sbin:/usr/sbin:/bin:/usr/bin。注意没有/usr/local/bin

  2. PWD环境变量如果没有设置,则为’/batchcompute/workdir’。用户的程序包始终会被解压到/batchcompute/workdir。

  3. 使用ClusterID提交任务时, 因为Docker registry一旦启动后就不停止,因此提交到一个cluster中的所有job,其 BATCH_COMPUTE_DOCKER_REGISTRY_OSS_PATH 必须相同。

  4. 目前 InputMapping,OutputMapping 不能同时挂载到同一个目录。

  5. BatchCompute启动Docker容器时使用—privileged=false模式,所以不允许在docker容器中启动docker容器。

本文导读目录