自定义镜像

本文详细介绍MaxCompute自定义镜像功能使用流程。

背景介绍

SQLPython开发过程中存在复杂的业务逻辑,依赖众多三方包。因此MaxCompute推出自定义镜像管理功能,支持使用Docker镜像来构建完整的开发环境,并在MaxCompute SQL、Python(PyODPSMaxFrame)开发中使用。

适用范围

  • 镜像大小: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镜像源地址。

  • 镜像内文件目录操作限制

    使用pipyum等安装包时,请勿将个人文件放入/home/admin、/usr/local/lib、/usr/ali、/apsara目录中。因为启动容器时,MaxCompute将挂载运行环境至这些目录,会导致覆盖掉镜像目录中原有的内容。

操作步骤

步骤一:安装Docker

步骤二:授权

为对应账号或用户授予RAM角色读取权限ACR(容器镜像服务)操作权限MaxCompute自定义镜像操作权限。具体如下:

授权使用场景

操作账号类型

权限要求

指导链接

RAM角色读取权限

阿里云账号(推荐)

阿里云账号默认拥有RAM角色读取权限,无需额外授权。

不涉及

RAM用户

授予AliyunRAMReadOnlyAccess权限。

ACR操作使用权限

阿里云账号(推荐)

阿里云账号默认拥有ACR操作所有权限,无需额外授权。

不涉及

RAM用户

如果您使用RAM用户操作ACR,需要为RAM用户授予AliyunContainerRegistryReadOnlyAccess权限。

ACR RAM用户授权

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、pipyum等基础环境。

  • MaxCompute Ubuntu基础镜像地址registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/ubuntu_20.04:latest

  1. 基于MaxCompute基础镜像构建自定义镜像的DockerFile文件。在命令行输入下方语句:

    vim DockerFile
  2. 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
  3. 基于DockerFile打包镜像。

    sudo docker build -f DockerFile -t <image_name>:<tag> .

    参数说明:

    • image_name:自定义镜像名称。

    • tag:自定义镜像版本。

步骤四:上传自定义镜像至ACR

  1. 登录容器镜像服务控制台,在左上角选择地域。

  2. 在左侧导航栏选择实例列表

  3. 实例列表详情页,单击创建企业版实例。如已创建可忽略。

    重要

    目前仅支持将自定义镜像上传至规格为标准版高级版ACR企业版实例中。

  4. 实例列表详情页,单击目标企业版实例的管理,进入该实例概览页面。

  5. 在左侧导航栏选择仓库管理 > 镜像仓库

    仓库管理镜像仓库页面,单击创建镜像仓库,在弹出的创建镜像仓库对话框中,填写如下信息后,单击下一步

    参数名

    是否必填

    说明

    地域

    必填

    自动生成当前实例所在地域。

    命名空间

    必填

    定义镜像仓库命名空间,设置后不可修改。推荐创建时使用仓库。

    • 推荐创建的命名空间用来对应一个公司、组织或个人用户,例如Aliyun。

    • 不推荐用来对应一个模块或系统,例如Tomcat、CentOS,应用或模块。

    仓库名称

    必填

    长度为 2 - 120 个字符,可使用小写英文字母、数字,可使用分隔符“_”、“-”、“.”、“/”(分隔符不能在首位或末位)。

    仓库类型

    选填

    • 公开镜像需用户登录企业版实例后才能拉取,如果期望匿名拉取,请开启实例的公开匿名拉取配置。

    • 企业版的私有镜像需用户登录企业版实例且有Pull操作授权才能拉取。

    • 默认为私有。

    镜像版本

    选填

    勾选后,该仓库下除 latest 之外的镜像版本均不可以覆盖,保证容器镜像版本一致性

    镜像加速

    选填

    勾选后,该仓库下会自动生成带 “_accelerated" 后缀的加速镜像版本

    • 完整模式完整模式加速效果较为显著,加速镜像体积约为 130% 原镜像体积,1GB 加速镜像生成时间约为 25 秒(已生成的镜像层不会重复生成)

    • 仅索引模式(公测中):仅索引模式(公测中)加速效果约为 70% 完整模式加速效果, 加速镜像体积约为 3% 原镜像体积,1GB 加速镜像生成时间约为 3 秒(已生成索引的镜像层不会重复生成)。

    摘要

    必填

    长度最长100个字符

    描述信息

    选填

    支持Markdown格式

  6. 配置代码源信息:

    代码源选择本地仓库,单击创建镜像仓库

    详情参考使用企业版实例构建镜像

  7. 将构建好的自定义镜像上传至同账号下的ACR

    1. 仓库管理镜像仓库页面,单击目标仓库对应的操作列的管理

    2. 在左侧选择基本信息

      根据基本信息页面下方的镜像指南,在Docker环境中将自定义镜像上传至ACR镜像仓库。

    3. (可选)若您使用的机器位于VPC网络,需要执行以下操作:

      1. 为已创建的企业版实例配置专有网络的访问控制,以便与企业版实例进行连接。详情请参见配置专有网络的访问控制

      2. 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中统一管理开发镜像。

  1. 登录MaxCompute控制台,在左上角选择地域。

  2. 在左侧导航栏,选择管理配置 > 镜像管理 。

  3. 镜像管理详情页,选择用户自定义镜像页签。

  4. 用户自定义镜像页签,单击创建镜像。在弹出的添加镜像对话框中,配置如下参数:

    说明

    首次创建镜像时,会弹出MaxCompute服务关联角色对话框,单击确认,系统将会自动创建一个用于访问ACR资源的服务关联角色。

    参数名

    描述

    镜像名称

    必填。自定义镜像名称,镜像名称以小写字母开头,只能包含小写字母、数字、横杠以及下划线

    在后续MaxCompute SQL、PyODPS、MaxFrame开发中会用到。

    镜像类型

    必填。ACR镜像类型,目前仅支持ACR企业版镜像。

    企业版镜像实例

    必填。选择ACR中已创建的企业镜像实例。

    镜像命名空间

    必填。选择ACR中已创建的企业镜像命名空间。

    镜像仓库

    必填。选择ACR中已创建的企业镜像仓库。

    镜像版本

    必填。选择您在ACR中上传的镜像版本。

    镜像描述

    必填。为本次添加的镜像增加相关描述。

    单击确定,完成自定义镜像的创建,可在自定义镜像列表中查看已创建的自定义镜像。

步骤六:使用自定义镜像

可以在MaxCompute SQL UDF、PyODPSMaxFrame开发中使用自定义镜像。

重要

每个开发作业仅可指定一个镜像,否则会造成镜像冲突问题。

  • 调用UDF,支持在SQL会话(Session)级别使用Flag指定所依赖的镜像和Python版本,命令如下:

    set odps.sql.python.version=cp37;
    set odps.session.image = <镜像名称>;
  • PyODPS开发中,支持使用executepersist方法的image参数指定已有镜像。命令如下:

    说明

    若需要在PyODPS中引用镜像开发,请升级PyODPSV0.11.5或以上版本。

    image='<镜像名称>'
  • MaxFrame开发中,支持在当前作业开发中指定已有镜像,相关参数如下:

    config.options.sql.settings = {
        "odps.session.image": "<镜像名称>"
    }、