本文详细介绍MaxCompute自定义镜像功能使用流程。
背景介绍
在SQL或Python开发过程中存在复杂的业务逻辑,依赖众多三方包。因此MaxCompute推出自定义镜像管理功能,支持使用Docker镜像来构建完整的开发环境,并在MaxCompute SQL、Python(PyODPS或MaxFrame)开发中使用。
适用范围
镜像大小:MaxCompute自定义镜像中,允许创建的单个镜像最大规格为10 GB。
镜像数量:MaxCompute单租户最多可上传10个镜像。
ACR版本要求:当前仅支持规格为标准版或高级版的ACR企业版实例。
CPU架构要求:构建镜像时请使用x86_64架构CPU,目前暂不支持macOS M系列、ARM等非x86_64架构CPU。
库版本要求:MaxCompute 作业运行环境基本对标CentOS 7,构建镜像时请尽可能使用兼容CentOS 7系统的安装包版本,基础镜像中yum源已配置为阿里云CentOS 7镜像源地址。
镜像内文件目录操作限制:
使用pip或yum等安装包时,请勿将个人文件放入
/home/admin、/usr/local/lib、/usr/ali、/apsara目录中。因为启动容器时,MaxCompute将挂载运行环境至这些目录,会导致覆盖掉镜像目录中原有的内容。
操作步骤
步骤一:安装Docker
Linux环境:可以参考Docker官方文档安装Docker。
macOS或Windows环境:
个人开发者:可以使用Docker Desktop。
未购买过授权的企业用户:推荐使用开源的Rancher Desktop。
步骤二:授权
为对应账号或用户授予RAM角色读取权限、ACR(容器镜像服务)操作权限和MaxCompute自定义镜像操作权限。具体如下:
授权使用场景 | 操作账号类型 | 权限要求 | 指导链接 |
RAM角色读取权限 | 阿里云账号(推荐) | 阿里云账号默认拥有RAM角色读取权限,无需额外授权。 | 不涉及 |
RAM用户 | 授予AliyunRAMReadOnlyAccess权限。 | ||
ACR操作使用权限 | 阿里云账号(推荐) | 阿里云账号默认拥有ACR操作所有权限,无需额外授权。 | 不涉及 |
RAM用户 | 如果您使用RAM用户操作ACR,需要为RAM用户授予AliyunContainerRegistryReadOnlyAccess权限。 | ||
MaxCompute自定义镜像操作权限 | 阿里云账号(推荐) | 阿里云账号默认拥有MaxCompute的自定义镜像查看、添加、删除等所有权限,无需额外授权。 | 不涉及 |
RAM用户 | 如果您使用RAM用户操作MaxCompute自定义镜像,需要按需为RAM用户授予对应权限。 |
步骤三:在Docker中构建自定义镜像
根据MaxCompute提供的基础镜像通过DockerFile方式自行构建自定义镜像。
MaxCompute CentOS基础镜像地址为
registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/base_image:latest,基础镜像中提供Python3.7、Python3.11、pip和yum等基础环境。MaxCompute Ubuntu基础镜像地址为
registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/ubuntu_20.04:latest。
基于MaxCompute基础镜像构建自定义镜像的DockerFile文件。在命令行输入下方语句:
vim DockerFile在DockerFile文件内新增如下内容,代码如下:
-- 使用MaxCompute CentOS基础镜像 FROM registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/base_image:latest -- 若使用Ubuntu镜像,将镜像地址替换为registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/ubuntu_20.04:latest -- 安装系统依赖 RUN yum install vi -y -- 安装第三库 RUN /usr/ali/python3.7/bin/python3 -m pip install --no-cache-dir pandas基于DockerFile打包镜像。
sudo docker build -f DockerFile -t <image_name>:<tag> .参数说明:
image_name:自定义镜像名称。
tag:自定义镜像版本。
步骤四:上传自定义镜像至ACR
登录容器镜像服务控制台,在左上角选择地域。
在左侧导航栏选择实例列表。
在实例列表详情页,单击创建企业版实例。如已创建可忽略。
重要目前仅支持将自定义镜像上传至规格为标准版或高级版的ACR企业版实例中。
在实例列表详情页,单击目标企业版实例的管理,进入该实例概览页面。
在左侧导航栏选择。
在仓库管理镜像仓库页面,单击创建镜像仓库,在弹出的创建镜像仓库对话框中,填写如下信息后,单击下一步。
参数名
是否必填
说明
地域
必填
自动生成当前实例所在地域。
命名空间
必填
定义镜像仓库命名空间,设置后不可修改。推荐创建时使用仓库。
推荐创建的命名空间用来对应一个公司、组织或个人用户,例如Aliyun。
不推荐用来对应一个模块或系统,例如Tomcat、CentOS,应用或模块。
仓库名称
必填
长度为 2 - 120 个字符,可使用小写英文字母、数字,可使用分隔符“_”、“-”、“.”、“/”(分隔符不能在首位或末位)。
仓库类型
选填
公开镜像需用户登录企业版实例后才能拉取,如果期望匿名拉取,请开启实例的公开匿名拉取配置。
企业版的私有镜像需用户登录企业版实例且有Pull操作授权才能拉取。
默认为私有。
镜像版本
选填
勾选后,该仓库下除 latest 之外的镜像版本均不可以覆盖,保证容器镜像版本一致性。
镜像加速
选填
勾选后,该仓库下会自动生成带 “_accelerated" 后缀的加速镜像版本。
完整模式:完整模式加速效果较为显著,加速镜像体积约为 130% 原镜像体积,1GB 加速镜像生成时间约为 25 秒(已生成的镜像层不会重复生成)。
仅索引模式(公测中):仅索引模式(公测中)加速效果约为 70% 完整模式加速效果, 加速镜像体积约为 3% 原镜像体积,1GB 加速镜像生成时间约为 3 秒(已生成索引的镜像层不会重复生成)。
摘要
必填
长度最长100个字符。
描述信息
选填
支持Markdown格式。
配置代码源信息:
代码源选择本地仓库,单击创建镜像仓库。
详情参考使用企业版实例构建镜像。
将构建好的自定义镜像上传至同账号下的ACR中
在仓库管理镜像仓库页面,单击目标仓库对应的操作列的管理。
在左侧选择基本信息。
根据基本信息页面下方的镜像指南,在Docker环境中将自定义镜像上传至ACR镜像仓库。
(可选)若您使用的机器位于VPC网络,需要执行以下操作:
为已创建的企业版实例配置专有网络的访问控制,以便与企业版实例进行连接。详情请参见配置专有网络的访问控制。
在Docker环境中操作ACR企业版实例时,域名中均需增加vpc。例如:下述命令中需要将
acr-test-registry.cn-wulanchabu.cr.aliyuncs.com修改为acr-test-registry-vpc.cn-wulanchabu.cr.aliyuncs.com。$ docker login --username=***@test.aliyunid.com acr-test-registry.cn-wulanchabu.cr.aliyuncs.com
说明如果登录实例时出错,检查仓库是否已打开公网访问。
步骤五:添加自定义镜像至MaxCompute
关联一个ACR中已经存在的镜像,以便在MaxCompute中统一管理开发镜像。
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择 。
在镜像管理详情页,选择用户自定义镜像页签。
在用户自定义镜像页签,单击创建镜像。在弹出的添加镜像对话框中,配置如下参数:
说明首次创建镜像时,会弹出MaxCompute服务关联角色对话框,单击确认,系统将会自动创建一个用于访问ACR资源的服务关联角色。
参数名
描述
镜像名称
必填。自定义镜像名称,镜像名称以小写字母开头,只能包含小写字母、数字、横杠以及下划线。
在后续MaxCompute SQL、PyODPS、MaxFrame开发中会用到。
镜像类型
必填。ACR镜像类型,目前仅支持ACR企业版镜像。
企业版镜像实例
必填。选择ACR中已创建的企业镜像实例。
镜像命名空间
必填。选择ACR中已创建的企业镜像命名空间。
镜像仓库
必填。选择ACR中已创建的企业镜像仓库。
镜像版本
必填。选择您在ACR中上传的镜像版本。
镜像描述
必填。为本次添加的镜像增加相关描述。
单击确定,完成自定义镜像的创建,可在自定义镜像列表中查看已创建的自定义镜像。
步骤六:使用自定义镜像
可以在MaxCompute SQL UDF、PyODPS及MaxFrame开发中使用自定义镜像。
每个开发作业仅可指定一个镜像,否则会造成镜像冲突问题。
调用UDF时,支持在SQL会话(Session)级别使用Flag指定所依赖的镜像和Python版本,命令如下:
set odps.sql.python.version=cp37; set odps.session.image = <镜像名称>;在PyODPS开发中,支持使用execute或persist方法的image参数指定已有镜像。命令如下:
说明若需要在PyODPS中引用镜像开发,请升级PyODPS至V0.11.5或以上版本。
image='<镜像名称>'在MaxFrame开发中,支持在当前作业开发中指定已有镜像,相关参数如下:
config.options.sql.settings = { "odps.session.image": "<镜像名称>" }、