批量计算提供了 App 功能,可以使用虚拟机(VM)镜像来定制运行环境,也可以使用 Docker 镜像,本文将介绍如何使用 Docker 镜像创建 App 和提交 App 作业。
背景 如果您的作业使用了 ISV 提供的软件或算法,可以考虑将其封装在 Docker 镜像中,再使用 App 设置作业的模板(包括资源类型和运行环境),这样一来,提交作业时只需提供输入和输出信息即可。当软件或算法有更新时,只需要更新 Docker 镜像,比如通过 Docker 镜像的 Tag 来标识不同的版本号,修改 App 中 Docker 镜像的版本号即可完成运行环境的更新。
使用 Dockfile 制作镜像 使用容器快速制作镜像 具体制作方法可参考用户指南中的 Docker 镜像制作。
建议:在制作 Docker 镜像时,最好带上 Tag,后续版本有更新时,只需要更新 Tag 即可。
B) 本地调试Docker镜像 Docker 镜像制作完成以后,可以参考用户指南中的 Docker 本地调试相关章节进行本地调试,确保 Docker 镜像在 BatchCompute 的环境下可以正常使用。
C) 推送到镜像仓库 可以将制作好的 Docker 镜像推送到 OSS 的镜像仓库。具体方法请参考用户指南中 Docker镜像上传到 OSS 的详细描述 。
A) 使用控制台创建 App 假如 Docker 镜像被推送到 OSS 镜像仓库的路径为oss://demo-bucket/dockers/,镜像名称为localhost:5000/demodockerimage:0.1。
create_app_basic
如上图所示,在创建 App 时,选择镜像类型为 Docker,填写 Docker 镜像的名称,以及 OSS Registry 的路径。关于控制台如何创建 App 的其他参数详情,请参考用户指南中创建 App 的描述,这里不再赘述。
B) 使用 SDK 创建 App 使用 Python SDK 创建 App 时,参考如下的形式:
#encoding=utf-8 import sys from batchcompute import Client, ClientError from batchcompute import CN_BEIJING as REGION from batchcompute.resources import ( JobDescription, TaskDescription, DAG, AutoCluster, GroupDescription, ClusterDescription, AppDescription ) ACCESS_KEY_ID='xxxx' # 填写您的 ACCESS_KEY_ID ACCESS_KEY_SECRET='xxxx' # 填写您的 ACCESS_KEY_SECRET def main(): try: client = Client(REGION, ACCESS_KEY_ID, ACCESS_KEY_SECRET) app_desc = { "Name":"Docker-app-demo", "Daemonize":False, "Docker":{ "Image":"localhost:5000/demodockerimage:0.1", "RegistryOSSPath":"oss://demo-bucket/dockers/" }, "CommandLine":"python test.py", #其他参数这里不详细展示
} appName = client.create_app(app_desc).Name print('App created: %s' % appName) except ClientError, e: print (e.get_status_code(), e.get_code(), e.get_requestid(), e.get_msg()) if name == 'main': sys.exit(main()) 如上面的实例代码所示,在AppDescription中填写 Docker 信息的Image和RegistryOSSPath。其他参数请参考用户指南中的创建示例。
提交 App 作业 提交作业时,不再涉及 Docker 相关的信息,具体方法请参考用户指南中提交 App 作业的描述。
Docker 镜像更新 假如 App 中使用的 ISV 提供的软件或算法有更新,您只需要更新 Docker 镜像,并用 Tag 标识版本。然后更新 App 信息中的 Docker 镜像名称就可以。
A) 使用控制台更新 modify_app_start
如上图所示,在 App 列表中找到需要更新的 App,点击修改按钮进入 App 的修改页面。
modify_app
如上图所示,在修改页面,修改 App 的 Docker 镜像名称后,点击提交即可完成 App 的更新。
B) 使用 SDK 更新 使用 Python SDK 来更新 App 的 Docker 信息可参考如下示例:
#encoding=utf-8 import sys from batchcompute import Client, ClientError from batchcompute import CN_BEIJING as REGION from batchcompute.resources import ( JobDescription, TaskDescription, DAG, AutoCluster, GroupDescription, ClusterDescription, AppDescription ) ACCESS_KEY_ID='xxxx' # 填写您的 ACCESS_KEY_ID ACCESS_KEY_SECRET='xxxx' # 填写您的 ACCESS_KEY_SECRET def main(): try: client = Client(REGION, ACCESS_KEY_ID, ACCESS_KEY_SECRET) app_desc = { "Name":"Docker-app-demo", "Daemonize":False, "Docker":{ "Image":"localhost:5000/demodockerimage:0.2", "RegistryOSSPath":"oss://demo-bucket/dockers/" }, "CommandLine":"python test.py", "EnvVars": {} } res = client.modify_app("Docker-app-demo", app_desc) print res except ClientError, e: print (e.get_status_code(), e.get_code(), e.get_requestid(), e.get_msg()) if name == 'main': sys.exit(main()) 对于简单的修改 Docker 版本号的情况,推荐使用控制台,操作更简单。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。