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

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 批量计算提供了 [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 版本号的情况,推荐使用控制台,操作更简单。

目录
相关文章
|
10月前
|
人工智能 前端开发 Docker
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
在 AI 智能体开发中,开发者常面临本地调试与云端部署的矛盾。本文介绍如何通过 Docker Compose 与 Docker Offload 解决这一难题,实现从本地快速迭代到云端高效扩容的全流程。内容涵盖多服务协同、容器化配置、GPU 支持及实战案例,助你构建高效、一致的 AI 智能体开发环境。
880 2
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
|
10月前
|
JavaScript Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
561 100
|
10月前
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
557 99
|
10月前
|
缓存 Docker 容器
优化Docker镜像大小的五个实用技巧
优化Docker镜像大小的五个实用技巧
866 98
|
10月前
|
缓存 前端开发 Docker
Docker Layer Caching:加速你的容器构建
Docker Layer Caching:加速你的容器构建
|
10月前
|
安全 Go Docker
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
|
9月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
908 6
|
10月前
|
Java Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
383 8
|
11月前
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
645 16
|
Linux Docker Windows
Docker概述:什么Docker如此特别,它是如何构建的
本文讲的是Docker概述:什么Docker如此特别,它是如何构建的,【编者的话】在上一系列介绍中,我们大体地介绍了CoreOS。在这个系列中我想介绍一下Docker。本文我们看一下为什么Docker如此特别,它是如何构建的。我们会从基本开始介绍,所以读者不必担心自己是刚接触Docker的。
1546 0