在SQL或Python开发过程中,会存在较为复杂的业务逻辑,依赖三方包众多,引用资源复杂,因此MaxCompute推出自定义镜像管理功能,您可自由、灵活地使用Docker镜像来构建自己所需的完整开发环境,并在MaxCompute SQL、Python(PyODPS或MaxFrame)开发中使用,本文将详细介绍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用户授予对应权限。
使用限制
镜像大小: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中构建自定义镜像
您可根据MaxCompute提供的基础镜像通过DockerFile的方式自行构建自定义镜像。MaxCompute基础镜像地址为registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/base_image:latest
,基础镜像中提供Python3.7、Python3.11、pip和yum等基础环境。
基于MaxCompute基础镜像构建自定义镜像的DockerFile文件,代码如下:
#使用MaxCompute基础镜像 From registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/base_image: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中创建镜像仓库。具体操作请参见使用企业版实例构建镜像,其中重点参数配置如下:
重要目前仅支持将自定义镜像上传至规格为标准版或高级版的ACR企业版实例中。
步骤
参数名
描述
创建企业版实例
实例规格
选择标准版或高级版。
创建镜像仓库
代码源
选择本地仓库
将构建好的自定义镜像上传至同账号下的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": "<镜像名称>" }