在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": "<镜像名称>" }