文档首页 > > 用户指南> 自定义镜像>

使用自定义镜像

使用自定义镜像

分享
更新时间:2021/04/27 GMT+08:00

使用自定义镜像的场景

使用DLI提供的自定义镜像功能提交作业,用户可以依赖DLI提供的Spark或者Flink基础镜像,使用Dockerfile将作业运行需要的依赖(文件、jar包或者软件)打包到镜像中,生成自己的自定义镜像,然后将镜像发布到SWR(容器镜像服务)中,最后在DLI服务作业编辑页面选择自己生成的镜像,运行作业。用户可以将一些私有能力内置到自定义镜像中,从而增强作业的功能、性能。

用户使用自定义镜像功能需要具备Docker相关的基础知识。

使用自定义镜像的限制条件

  • 只支持容器化队列。
  • 只支持Spark、Flink jar作业,即jar包作业。

使用自定义镜像操作步骤

以tensorflow为例,说明如何将tensorflow打包进镜像,生成安装了tensorflow的自定义镜像,在DLI作业中使用该镜像运行作业。

  1. 获取DLI基础镜像。

    使用以下命令获取:

    命令格式:

    docker pull [swr仓库地址]/[组织名称]/[镜像名称]:[镜像版本]

    示例:

    docker pull swr.cn-north-1.huaweicloud.com/dli/spark:2.3.2-1.0.0-euler-2.9-x86_64
    表1 基础镜像列表

    组织名称

    镜像名称

    镜像版本

    dli

    spark

    2.3.2-1.0.0-euler-2.9-20.04-x86_64

    2.3.2-1.0.0-euler-2.9-aarch64

    flink

    1.10-1.0.0-euler-2.9-x86_64

    1.10-1.0.0-euler-2.9-aarch64

    镜像命名说明:

    <swr-registry>/<org>/<compoent>:<component-ver>-<imagever>-<os>-<os-ver>-<arch>

    • swr-registry:对应的swr仓库地址,例如:swr.cn-north-1.huaweicloud.com
    • org:组织名称,默认为dli
    • compoent:镜像名称为spark或者flink
    • component-ver:镜像版本,spark为2.3.x,2.4.x; flink为1.10
    • imagever:1.0.0,递增
    • os:euler
    • os-ver: os版本
    • arch: x86_64或aarch64

  2. 编写Dockerfile文件。

    具体的Dockerfile内容示例如下:

    ARG BASE_IMG=spark:latest
    
    FROM ${BASE_IMG} as builder
    USER root
    RUN set -ex && \
        mkdir -p /root/.pip && \
        echo "[global]" >> /root/.pip/pip.conf && \
        echo "index-url = https://mirrors.huaweicloud.com/repository/pypi/simple" >> /root/.pip/pip.conf && \
        pip3 install --user --no-cache-dir tensorflow==1.13.1
    
    FROM ${BASE_IMG}
    USER root
    COPY --from=builder --chown=omm:ficommon /root/.local /home/omm/.local
    USER omm

    其中,主要包含了以下步骤:

    1. 设置pip的可用仓库地址。
    2. 使用pip3安装tensorflow算法包。
    3. 将安装了算法包的临时镜像builder里的内容拷贝到基础镜像中(这一步主要是为了减小镜像体积),用于生成最终的自定义镜像。

  3. 利用Dockerfile生成自定义镜像。

    镜像打包命令格式:
    docker build -t [组织名称]/[镜像名称]:[镜像版本] --build-arg BASE_IMG=[DLI基础镜像地址] -f Dockerfile . 
    镜像打包命令示例:
    docker build -t mydli/spark:1.0 --build-arg BASE_IMG=swr.cn-north-1.huaweicloud.com/dli/spark:2.3.2-1.0.0-euler-2.9-x86_64 -f Dockerfile . 

  4. 将自定义镜像上传到SWR(容器镜像)服务中。SWR服务提供了两种上传方式:

    • 客户端上传镜像。
      1. 连接容器镜像服务。

        命令格式:

        docker login -u xxxxxx@xxxxxxx -p xxxxxxxxxxxxx
      2. 在安装docker的机器给spark镜像打标签。

        命令格式:

        docker tag [镜像名称:版本名称] [镜像仓库地址]/[组织名称]/[镜像名称:版本名称]

        命令示例:

        docker tag mydli/spark:1.0 swr.cn-north-1.huaweicloud.com/mydli/spark:1.0
      3. 上传镜像至镜像仓库。

        命令格式:

        docker push [镜像仓库地址]/[组织名称]/[镜像名称:版本名称]

        命令示例:

        docker push swr.cn-north-1.huaweicloud.com/mydli/spark:1.0 

      客户端上传镜像具体请参考《容器镜像服务用户指南》。

    • 页面上传镜像。

      页面上传镜像具体请参考《容器镜像服务用户指南》。

  5. 在DLI服务中提交Spark或者Flink jar作业时选择自定义镜像。

    • 打开管理控制台的Spark作业或者Flink作业编辑页面,在自定义镜像列表中选择已上传并共享的镜像,运行作业,即可使用自定义镜像运行作业。如果没有共享镜像,单击“授权”并填写对应的配置参数,也可运行作业。
      图1 在DLI Spark作业编辑页面,选择自定义镜像
      图2 在DLI Flink jar作业编辑页面,选择自定义镜像
    • 在使用API时,在作业参数中指定image参数,即可使用自定义镜像运行作业。Spark作业请参考《创建批处理作业》,Flink jar作业请参考《创建Flink Jar作业》。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区论坛频道来与我们联系探讨

智能客服提问云社区提问