如何基于CDSW基础镜像定制Docker
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
1.文档编写目的
CDSW中提供的基础镜像中已有R的环境,但是在真实使用过程中往往需要安装更多R的包。我们在创建一个新的Project时如果使用CDSW基础镜像,每次都需要重新安装需要的依赖包,为了避免大家每次都需要重复安装R的包,这时就需要定制我们自己的Docker。这样在创建新的Project时,如果使用定制过的Docker镜像,就不需要再去安装额外的R依赖包。本文档主要讲述如何基于CDSW基础镜像定制我们自己的Docker镜像。
- 内容概述
1.安装前准备
2.查找CDSW基础镜像
3.定制Docker镜像
4.自定义镜像使用
- 测试环境
1.操作系统:RedHat7.2
2.采用sudo权限的ec2-user用户操作
3.CDSW版本1.1.1
2.查看CDSW基础镜像
登录CDSW平台查看使用的基础镜像名称
点击“Engines”
上图标注部分即为CDSW的基础镜像(docker.repository.cloudera/cdsw/engine:2)由Docker的Repository和Tag组成。
命令行查看CDSW基础镜像:
[ec2-user@ip-172-31-31-212 ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.repository.cloudera.com/cdsw/engine 2 b94fc4cc9b8b 2 months ago 5.83 GB
3.定制Docker镜像
1.使用docker命令启动容器
[ec2-user@ip-172-31-31-212 ~]$ sudo docker run -it --network='host' docker.repository.cloudera.com/cdsw/engine:2 /bin/bash
root@ip-172-31-31-212:/home/cdsw#
如上图已成功启动docker.repository.cloudera.com/cdsw/engine:2并登录成功。
命令参数说明:docker run OPTIONSIMAGE COMMAND
-it : 进行交互式操作
--network : 设置docker容器的网络,这里设置network为host的与主机网络一致
到此完成容器的启动并登录,接下来我们就可以对容器R的环境进行修改配置
2.修改R的CRAN源指向私有源
在/usr/local/lib/R/etc目录下新增文件Rprofile.site,并添加如下内容
root@ip-172-31-31-212:/home/cdsw# cd /usr/local/lib/R/etc/
root@ip-172-31-31-212:/home/cdsw# vim Rprofile.site
# Site R configuration.
local({
r <- getOption("repos")
#r["CRAN"] <- "https://cloud.r-project.org/"
r["CRAN"] <- "http://ip-172-31-22-86.ap-southeast-1.compute.internal/"
options(repos = r)
})
3.安装R的依赖包
进入R的控制台安装包,我们这里安装了sparklyr和h2o包,为了方便我这里就偷懒直接使用外网环境安装的包,具体R的私有源使用可参考如何在Redhat中安装R的包及搭建R的私有源。
root@ip-172-31-31-212:/usr/local/lib/R/etc# R
R version 3.3.0 (2016-05-03) -- "Supposedly Educational"
…
> install.packages("sparklyr")
> install.packages("h2o")
以上完成了R环境的定制,那么关键部分到了,如何保存定制的镜像。
4.保存Docker镜像
在未退出容器的情况下,在新的命令窗口创建执行如下命令保存一个新的Docker镜像。
首先找到我们登录的容器ID
[ec2-user@ip-172-31-31-212 ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
69be88193fa7 docker.repository.cloudera.com/cdsw/engine:2 "/bin/bash" 57 minutes ago Up 57 minutes affectionate_saha
上图标注部分即为容器的ID和对应镜像的Repository:Tag,获取到容器的ID执行如下命令将该容器保存为新的镜像。
[ec2-user@ip-172-31-31-212 ~]$ sudo docker commit 69be88193fa7 docker.repository.cloudera.com/cdsw/myengine:2.0.0
sha256:727128de8e3df7e4b74395b9b9c8a4f5df6bba8cc7e03baffaf98436c4ff72d5
[ec2-user@ip-172-31-31-212 ~]$
通过命令查看我们定制的Docker镜像
[ec2-user@ip-172-31-31-212 ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.repository.cloudera.com/cdsw/myengine 2.0.0 727128de8e3d About a minute ago 6.01 GB
如上图标注则表示我们的自定义镜像保存成功,到此我们的自定义镜像就制作完成了,接下来就可以在CDSW中去使用。
4.自定义镜像使用
1.登录CDSW
2.添加自定义镜像
Description:镜像的描述
Repository:Tag:镜像的Repository和Tag组合
保存成功。
3.全局设置使用自定义镜像
此处可以将我们的自定义镜像设置为默认镜像,这样所有的docker启动时默认使用的时自定义镜像
4.Project设置自定义镜像
打开myfirstR工程
点击“Setting”
5.验证自定义镜像
1.进入myfirstR工程
删除myfirstR工程下R的依赖包
2.打开“Open Workbench”
3.启动会话“Launch Session”
启动成功并且使用的是我们自定义的镜像。
4.使用library加载sparklyr和h2o包
在没有安装sparklyr和h2o包的情况下,能够正常加载这两个包。
6.总结
本文讲述了如何根据CDSW的基础镜像定制我们自己所需的Docker。
- 首先通过Docker命令启动CDSW的基础镜像,我们会在这个基础镜像中做一些配置修改和R包的预安装,并最终另存为我们所需要的“定制化”Docker。
- 在这个需要定制化的镜像中,本文讲述了如何修改R的私有源地址,但为了方便依旧采用了公网预安装需要的sparklyr和h2o,具体如何制作R的私有源,请参考如何在Redhat中安装R的包及搭建R的私有源。
- 然后将该Docker另存为我们的定制化Docker镜像,并将该定制化Docker配置到CDSW。
- 最后我们在新建Project的时候就可以选择该定制化Docker,已经预安装好了一些R依赖包(sparklyr/h2o),在开发具体的算法工程时,就不用再去连接共有/私有源下载。当然因为配置好了R的私有源,万一有些包没有预安装,也可以临时安装。
醉酒鞭名马,少年多浮夸! 岭南浣溪沙,呕吐酒肆下!挚友不肯放,数据玩的花! 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操
- 人工智能:未来决策制定的机遇与影响
- CaseStudy(showcase)界面篇-导出xaml以及放入Blend的技巧
- [Silverlight动画]转向行为 - 避开行为
- CaseStudy(showcase)界面篇-desing设计界面
- [Silverlight动画]转向行为 - 寻找行为
- 【数字货币】数字黄金
- [Silverlight动画]转向行为 - 转向机车
- [Silverlight动画]转向行为 - 机车
- 微信、小游戏与未来
- [Silverlight动画]转向行为 - 2D向量
- [Silverlight动画]转向行为 - 介绍
- WCF技术剖析之十七:消息(Message)详解(中篇)
- flash游戏引擎整理
- [Silverlight动画]转向行为 - 群落
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android Studio通过Artifactory搭建本地仓库优化编译速度的方法
- Android实现向本地写入一个XML文件和解析XML文件
- Android自定义View实现带4圆角或者2圆角的效果
- Android 在 res/layout 文件夹 下创建一个 子文件夹实例
- Android开发实现TextView超链接5种方式源码实例
- Android根据包名停止其他应用程序的方法
- Android APP存活检测方式
- 利用Android两行代码真正杀死你的App
- android判断应用是否已经启动的实例
- 解决android studio引用远程仓库下载慢(JCenter下载慢)
- 在Android中查看当前Activity是否销毁的操作
- Android 7.0 运行时权限弹窗问题的解决
- Android加密之全盘加密详解
- Android 实现彻底退出自己APP 并杀掉所有相关的进程
- 使用Android开发接入第三方原生SDK实现微信登录