如何在CDSW中定制Docker镜像

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

Fayson的github:https://github.com/fayson/cdhproject

提示:代码块部分可以左右滑动查看噢

1.文档编写目的

前面Fayson介绍了Cloudera的产品CDSW(Cloudera Data Science WorkBench)的安装及示例代码的运行,在《如何基于CDSW基础镜像定制Docker》中已经介绍了Docker镜像的定制,在这里我们基于CDSW1.2.2的基础镜像来再次描述下。

在使用的过程中,如果用户的环境与公网是通的则还好,对于多数企业来说搭建CDSW平台都是在业务网无法访问外网,在需要使用第三方Packages时比较麻烦需要将包从外网下载然后上传至Docker容器使用命令进行安装,对于有依赖的包安装时更加麻烦,本篇文章主要介绍如何深度定制CDSW的Docker镜像。在学习本章知识前,你可能需要了解以下知识:

《如何在Windows Server2008搭建DNS服务并配置泛域名解析》

《如何利用Dnsmasq构建小型集群的本地DNS服务器》

《如何在Windows Server2012搭建DNS服务并配置泛域名解析》

《如何在CDH5.13中安装CDSW1.2》

《如何在CDSW中使用R绘制直方图》

《如何使用CDSW在CDH集群通过sparklyr提交R的Spark作业》

内容概述

1.配置Python和R的私有源地址

2.预装Python和R的依赖包

3.定制Docker镜像及自定义镜像在CDSW中使用

4.测试及总结

测试环境

1.RedHat7.2

2.CDSW1.2.2

前置条件

1.Python私有源已搭建

2.R私有源已搭建

2.查看镜像并使用镜像启动一个容器

1.使用管理员登录CDSW查看当前使用的Docker镜像

可以看到当前使用的镜像为docker.repository.cloudera.com/cdsw/engine:4

2.登录CDSW Master服务器上使用如下命令查看镜像

(可左右滑动)

3.通过如下命令使用docker.repository.cloudera.com/cdsw/engine:4镜像启动一个容器

(可左右滑动)

如上图所示我们已成功启动了一个Docker容器。

3.配置Python私有源

在前面章节我们已成功找到了CDSW使用的镜像并使用docker命令启动了该镜像的一个容器,那么我们在这个启动的容器里配置Python的私有源。

1.编辑/etc/pip.conf配置文件,文件内容如下

(可左右滑动)

注意:user = true配置表示是否允许非root用户使用pip命令安装依赖包。

2.保存配置文件,测试私有源是否正常

(可左右滑动)

从上面安装bit-array包可以看到是从私有源地址进行下载的,到此我们的Python私有源地址就配置完成。

4.预装Python包

前面一章节我们配置好了Python的私有源地址,接下来就可以安装我们需要的Python包了,在基础镜像中安装需要的依赖包后,在新建的工程中就不需要重复的安装Python包。

1.在docker中的/root目录下创requirements.txt文件,内容如下:

(可左右滑动)

requirements.txt文件列出所有需要安装的依赖包及具体的版本号,每个依赖包占一行。

2.在命令行使用pip命令批量安装依赖包

(可左右滑动)

等待安装完成即可。

5.配置R私有源

需要使用R的环境,在内网环境下也需要考虑配置R的私有源地址,这样可以方便的使用install.packages命令来安装我们需要的依赖包。

1.进入容器的/usr/local/lib/R/etc目录下

2.在该目录下创建Rprofile.site文件,内容如下:

(可左右滑动)

将上面的地址修改为我们私有源的地址即可,

注意:这个地址有些特别不是具体到R的Packages路径,在安装依赖包时会在该地址后面拼上/src/contrib/路径。

3.测试R私有源配置是否正常

进入R命令行,执行install.packages(“bfa”)命令安装依赖包

由上图可以看到依赖包的下载地址指向了私有源地址,这里可以看到依赖包真实的下载地址是私有源地址拼接/src/contrib/coda_0.19-1.tar.gz

6.预装R依赖包

私有源地址配置好后,接下来就可以根据需要安装R的Package。

1.在命令运行R的命令,进入R的命令行

2.进入R的命令行后,在命令行执行install.packages(“xxxx”)进行安装xxx即为我们的包名

安装包会自动编译,等编译完成即可。

7.定制Docker镜像

前面很多章节都在讲通过docker.repository.cloudera.com/cdsw/engine:4镜像启动一个容器,然后再容器里面进行Python和R的私有源配置及Package的安装。我们在该容器做了这么多修改,那接下来到了关键部分就是将该容器另存为一个新的镜像,通过这种方式来实现Docker镜像的定制。

通过将正在运行的Container另存为一个新的镜像,所以这里需要特别注意我们上面操作完成后不能退出容器,因为退出后该容器就会被销毁,上面所做的修改都会丢失,所以需要在新的会话窗口进行如下操作。

1..使用如下命令找到我们启动docker.repository.cloudera.com/cdsw/engine:4镜像的容器ID

(可左右滑动)

CONTAINER ID字段即为该容器的ID,获取到容器的ID执行如下命令将该容器保存为新的镜像。

2.使用docker命令保存当前运行的容器为新的镜像

(可左右滑动)

3.查看镜像是否保存成功

(可左右滑动)

可以看到镜像已经保存成功,到此就完成了我们自定义镜像的制作。

8.自定义镜像使用

1.登录CDSW,进入admin菜单

2.在“Engine Images”栏添加我们自定义的镜像

将我们前面自定义的镜像docker.repository.cloudera.com/cdsw/engine:6添加到如下图配置

3.测试自定义镜像

4.进入“settings”界面,选择我们自定义的镜像

5.打开WorkBench

可以看到使用的Docker镜像为我们自定义的镜像

6.启动Session会话

7.验证python定制的包否以存在

输入!pip show tensorflow命令查看是否为我们安装的版本

显示结果如下:

使用pip命令安装包,确认python源是否正常

8.启动一个R工程的Session,测试R的源和预装的Packages是否正常

通过终端使用install.packages命令安装packages正常

在CDSW界面使用library(sparklyr)加载安装好的packages

如上图显示加载packages未出现异常,则表示加载成功。

9.总结

在定制Docker镜像是启动的容器一定不能退出,否则对容器做出的修改都会丢失,无法保存新的镜像。

R的私有源通过Session会话的终端可以正常使用安装,直接使用会话窗口install.packages(“xxxx”),未能正常使用私有源地址。

在做Docker镜像时可以在定制镜像的基础上修改,避免了做重复的工作。

在新建Project的时候就可以选择该定制化Docker,已经预安装好了一些R和Python依赖包,在开发具体的算法工程时,就不用再去连接公有/私有源下载。当然因为配置好了私有源,以防止有些包没有预安装,也可以临时安装。

注意:这里我们在使用自定义镜像时有一个小的问题,就是在启动会话时有时会出现如下显示:

这时我们直接Stop该会话,再重新启动即可。启动会话的时跟Kubernetes有关,查看相关日志发现启动正常的是启动失败的Events事件顺序不一样,具体什么原因目前Fayson也无法得到确切的解释。

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180128G08T0000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券