自定义镜像

在SQL或Python开发过程中,会存在较为复杂的业务逻辑,依赖三方包众多,引用资源复杂,因此MaxCompute推出自定义镜像管理功能,您可自由、灵活地使用Docker镜像来构建自己所需的完整开发环境,并在MaxCompute SQL、Python(PyODPS或MaxFrame)开发中使用,本文将详细介绍MaxCompute自定义镜像功能使用流程。

前提条件

  • 已成功安装Docker。

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

    授权使用场景

    操作账号类型

    权限要求

    指导链接

    RAM角色读取权限

    阿里云账号(推荐)

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

    不涉及

    RAM用户

    授予AliyunRAMReadOnlyAccess权限。

    ACR操作使用权限

    阿里云账号(推荐)

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

    不涉及

    RAM用户

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

    ACR RAM用户授权

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

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

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

    参数说明如下:

    • image_name:自定义镜像名称。

    • tag:自定义镜像版本。

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

  1. 登录容器镜像服务控制台,在ACR中创建镜像仓库。具体操作请参见使用企业版实例构建镜像,其中重点参数配置如下:

    重要

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

    步骤

    参数名

    描述

    创建企业版实例

    实例规格

    选择标准版高级版。

    创建镜像仓库

    代码源

    选择本地仓库

  2. 将构建好的自定义镜像上传至同账号下的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. 用户自定义镜像页签中单击创建镜像,并在添加镜像对话框中配置如下参数。

    说明

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

    参数名

    描述

    镜像名称

    自定义镜像名称,后续MaxCompute SQL、PyODPS、MaxFrame开发中会用到。

    镜像类型

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

    企业版镜像实例

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

    镜像命名空间

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

    镜像仓库

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

    镜像版本

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

    镜像描述

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

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

步骤四:使用自定义镜像

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