使用 Docker 镜像构建批量计算 App

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 批量计算提供了 [App 功能](https://help.aliyun.com/document_detail/98906.html?spm=a2c4g.11186623.6.591.6ce558471gLY2q),可以使用虚拟机(VM)镜像来定制运行环境,也可以使用 Docker 镜像,本文将介绍如何使用 Docker 镜像创建 App 和提交 App 作业。 ## 背景 如果您的

批量计算提供了 App 功能,可以使用虚拟机(VM)镜像来定制运行环境,也可以使用 Docker 镜像,本文将介绍如何使用 Docker 镜像创建 App 和提交 App 作业。

背景

如果您的作业使用了 ISV 提供的软件或算法,可以考虑将其封装在 Docker 镜像中,再使用 App 设置作业的模板(包括资源类型和运行环境)。这样一来,提交作业时只需提供输入和输出信息即可。
当软件或算法有更新时,只需要更新 Docker 镜像,更新后可以通过 Docker 镜像的 Tag 来标识不同的版本号,修改 App 中 Docker 镜像的版本号即可完成运行环境的更新。

1. 准备 App 的 Docker 镜像

A) 制作 Docker 镜像

根据自己的需求,用户可以使用官方镜像仓库中的镜像作为基础镜像,安装需要的软件或算法,制作成 Docker 镜像,完成运行环境的定制;
制作镜像有两种方法:

  • 使用 Dockfile 制作镜像
  • 使用容器快速制作镜像

具体制作方法可参考用户指南中的 Docker 镜像制作

建议:在制作 Docker 镜像时,最好带上 Tag,后续版本有更新时,只需要更新 Tag 即可。

B) 本地调试Docker镜像

Docker 镜像制作完成以后,可以参考用户指南中的 Docker 本地调试相关章节进行本地调试,确保 Docker 镜像在 BatchCompute 的环境下可以正常使用。

C) 推送到镜像仓库

可以将制作好的 Docker 镜像推送到 OSS 的镜像仓库。具体方法请参考用户指南中 Docker镜像上传到 OSS 的详细描述 。

2. 创建 App

BatchCompute提供了 API、SDK、控制台等三种方式创建 App,下面以控制台和 Python SDK 为例,分别介绍如何使用 Docker 镜像创建 App。

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 信息的ImageRegistryOSSPath。其他参数请参考用户指南中的创建示例

3. 提交 App 作业

提交作业时,不再涉及 Docker 相关的信息,具体方法请参考用户指南中提交 App 作业的描述。

4. 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 版本号的情况,推荐使用控制台,操作更简单。

目录
相关文章
|
3天前
|
消息中间件 Kafka 流计算
docker环境安装kafka/Flink/clickhouse镜像
通过上述步骤和示例,您可以系统地了解如何使用Docker Compose安装和配置Kafka、Flink和ClickHouse,并进行基本的验证操作。希望这些内容对您的学习和工作有所帮助。
50 28
|
16天前
|
网络协议 Linux 网络安全
docker centos镜像 npm安装包时报错“npm ERR! code ECONNRESET”
通过上述步骤,您可以有效解决在 Docker 中使用 CentOS 镜像安装 npm 包时遇到的 "npm ERR! code ECONNRESET" 错误。希望这些方法能帮助您顺利进行 npm 包的安装。
94 26
|
1月前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用
88 27
|
1月前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用。掌握这些Docker基础概念和操作,可以显著提高开发和部署效率,确保应用程序的可移植性和可扩展性。
74 22
|
1月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
160 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
1月前
|
Ubuntu NoSQL 开发工具
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
213 70
|
1月前
|
Ubuntu NoSQL 关系型数据库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
127 29
|
2月前
|
NoSQL Java Linux
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
282 75
|
2月前
|
NoSQL PHP MongoDB
docker push推送自己搭建的镜像
本文详细介绍了如何搭建和复盘两个Web安全挑战环境:人力资源管理系统和邮件管理系统。首先,通过Docker搭建MongoDB和PHP环境,模拟人力资源管理系统的漏洞,包括nosql注入和文件写入等。接着,复盘了如何利用这些漏洞获取flag。邮件管理系统部分,通过目录遍历、文件恢复和字符串比较等技术,逐步绕过验证并最终获取flag。文章提供了详细的步骤和代码示例,适合安全研究人员学习和实践。
70 3
docker push推送自己搭建的镜像
|
2月前
|
Docker 容器

热门文章

最新文章

  • 1
    MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
  • 2
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
  • 4
    【Azure App Service】基于Linux创建的App Service是否可以主动升级内置的Nginx版本呢?
  • 5
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 6
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 7
    【Azure Function】Function App出现System.IO.FileNotFoundException异常
  • 8
    【Azure Logic App】使用MySQL 新增行触发器遇见错误 :“Unknown column 'created_at' in 'order clause'”
  • 9
    阿里云APP备案流程图以及备案所需材料整理,跟着教程一步步操作
  • 10
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程