228
windows
前言__Docker_操作指南_批量计算-阿里云
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镜像。
# 使用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镜像。 |
程序运行平台 | 支持Window和Linux | 支持Linux |
本地调试 | 不支持本地调试 | 镜像在本地制作,支持本地调试 |
3. 安装Docker
(1) 在 Ubuntu 上安装(推荐使用)
sudo apt-get update #更新软件源
sudo apt-get install docker.io #安装docker
#检查是否成功
sudo docker ps
可以看到类似下面的结果:
Ubuntu下安装好docker后,每次都要加sudo运行比较影响效率。有没有好办法?
您可以通过加入docker组,即可免sudo。
sudo gpasswd -a ${USER} docker # 将当前用户加入docker组, 如果没有docker组,加一个:sudo groupadd docker
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,结构如下:
dockerUbuntu
|-- Dockerfile
文件 Dockerfile 的内容:
FROM ubuntu:14.04
# 这里要替换 your_name 为您的名字, 和your_email 为您的Email
MAINTAINER your_name <your_email>
# 更新源
RUN apt-get update
# 清除缓存
RUN apt-get autoclean
# 安装python
RUN apt-get install -y python
# 启动时运行这个命令
CMD ["/bin/bash"]
运行以下命令,build镜像:
cd dockerUbuntu #进入 dockerUbuntu 目录
docker build -t myubuntu ./ #正式build, 命名为 myubuntu
- 注意:docker 命令在ubuntu中默认需要加sudo才能运行,而在Mac/Windows中,需要从“Docker Quickstart Terminal”中启动的命令行工具中运行。
build 完成后, 运行以下命令查看:
docker images
可以看到类似下面的结果:
制作docker镜像,除了Dockerfile这种方式外,还有更加直观的制作方式。
5. 将docker镜像上传到OSS
使用BatchCompute Docker服务,需要将制作的Docker镜像myubuntu上传到OSS,系统将会从OSS下载这个镜像来运行您的任务程序。
(1) 安装 OSS Docker Registry 2
假设您想要将docker存储到OSS的目录路径为:
oss://your-bucket/dockers/
我们将利用Docker Registry 2官方镜像创建一个私有镜像仓库,需要配置了OSS的Access Key ID, Access Key Secret, Region, Bucket等信息。
具体安装步骤如下:
先在当前目录生成文件config.yml
version: 0.1
log:
level: debug
storage:
oss:
accesskeyid: your_access_key_id
accesskeysecret: your_access_key_secret
region: oss-cn-qingdao
bucket: your-bucket
rootdirectory: dockers
secure: false
internal: false
http:
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官方文档
然后运行下面的命令安装
docker pull registry: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才能正常工作。
完成后,可以运行以下命令查看:
docker ps #查看运行的container
如果成功安装,可以看到 registry:2
(2) 运行下面命令,将镜像上传到 OSS:
docker tag myubuntu localhost:5000/myubuntu
docker push localhost:5000/myubuntu
注意:
- 要用 localhost:5000/ 作为前缀,用其他的字符串上传不了。5000 端口是第(1)步中 -p 5000:5000 中(冒号前的5000)指定的。
- 您制作的镜像名称为 localhost:5000/myubuntu,而不是 myubuntu。
检验是否上传成功, 可以直接使用OSS控制台查看是否有这个目录: oss://your-bucket/dockers/repositories/library/myubuntu/
6. 使用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容器。
最后更新:2016-11-23 16:03:58
上一篇:
并发__操作指南_批量计算-阿里云
下一篇:
提交作业例子__Docker_操作指南_批量计算-阿里云
图片处理__安卓应用示例_最佳实践_对象存储 OSS-阿里云
DescribeLoadBalancerAttribute__LoadBalancer相关API_API 参考_负载均衡-阿里云
启用伸缩组__API快速入门_快速入门_弹性伸缩-阿里云
阿里云的技术到底有多强?
GetShipperStatus__日志库相关接口_API-Reference_日志服务-阿里云
云服务器 ECS 快照(Snapshot)
E-MapReduce 快速开始__创建 E-MapReduce_快速入门_E-MapReduce-阿里云
步骤一:控制台配置__快速上线_Web 应用防火墙-阿里云
直播截图__使用手册_视频直播-阿里云
创建触发器__数据库开发_用户指南(RDBMS)_数据管理-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云