R语言相比较其他主流语言来说,确实资料相对较少,自己实践起来需要稍微多花一些功夫,这里记录一下R语言再linux环境(centos7)下基于docker的安装方式,个人不建议直接使用R的tar.gz包这种直接安装方式,这种方式需要依赖很多其他基础环境的支持,安装特别费劲,好了,废话不多说,直接开干。开干之前首先需要自行准备一下Linux以及Docker环境。

一、在线方式安装:

R语言的docker安装是基于r-base镜像进行,首先你可以直接docker pull r-base进行最新版本镜像拉取,但是个人习惯先去https://hub.docker.com/ 上面看看前两个更稳定的版本,

1.1、首先进入首页搜索r-base: 

然后进入r-base,选择Tags:

我这里拉取的是4.0.2版本,在linux输入命令:

docker pull r-base:4.0.2

拉取成功后查看镜像 docker images 如下图所示:

 

1.2、启动容器:

首先你可以直接 docker run -ti --rm r-base 交互式运行一个R语言的容器,但是,基于后续使用时,R环境拉取依赖包很费时间,很多时候你可能会从以前的环境中直接拷贝library依赖包到现有环境中,所有,建议将物理目录与容易依赖包目录进行挂载互通,以方便直接使用现成的依赖包,所以建议使用以下命令进行启动容器:

docker run -it --name R402  -v /usr/local/lib/R/site-library:/usr/local/lib/R/site-library  r-base:4.0.2

解释:

a、--name R402 是个容器命名为R402方便使用容器。

b、 /usr/local/lib/R/site-library:/usr/local/lib/R/site-library  将物理目录:/usr/local/lib/R/site-library 与容器目录:/usr/local/lib/R/site-library进行挂载互通,其中冒号(:)前面的是物理目录,后面的是容器目录,当然你也可以挂载任意一个物理目录作为依赖包的存放目录。这里挂载的目的是为了很多依赖包下载不下来,通过其他方式拿到依赖包时,可以直接copy到挂的的目录,以达到使用依赖包的目的。

c、r-base:4.0.2是我们要依赖的镜像以及它的版本

运行上面命令之后会直接进入R语言的命令界面:

补充:这里补充一些关于R的一些可能会用到的命令:

.libPaths():查看包的安装目录

installed.packages():查看已安装包信息

install.packages("Rserve"):下载Rserve依赖包

library():查看已经安装的包目录

library(Rserve):载入Rserve依赖包

q():退出R

1.3、注意,挂载物理目录与容器目录后,如果你从其他环境复制了依赖包到当前机器的依赖包中,需要重启容器才能生效使用:

停止容器:docker stop R402
启动容器:docker start R402
交互式进入容器:docker exec -it R402 bash
进入R命令界面:R

如下图所示:

至此,在线安装完成。

二、离线安装

如果你当前的机器没有网络,或者不能连接外网,此时,需要离线安装R环境时,利用已有的R语言的Docker环境进行本地镜像的制作:(这里可以基于上面的第一步进行本地镜像的制作),核心就是利用一台可以网的机器将R语言的docker镜像、容器创建完成,并且将所需要的依赖包也下载好备用,然后制作本地镜像放到离线环境中去。

2.1、利用已有的r-base镜像制作本地镜像,先通过r-base镜像生成R400容器,再利用R400容器生成r-4.0.0本地镜像:

   格式:docker  commit  -m  '镜像描述'  -a  '制作者'  容器名  镜像名

docker  commit  -m  'r-4.0.2'  -a  'yjhkdm'  R402  r-4.0.2

 注意:镜像描述、镜像名称据需要小写

完成之后查看镜像如下图所示:

2.2、打成img:

  格式:docker  save  -o  img包存放路径及名字   基于的镜像名

docker  save  -o  /home/r-4.0.2.img  r-4.0.2

2.3、将r-4.0.0.img 文件复制到离线环境中,然后docker 加载 img 
  格式:docker  load  <  img 文件所在路径及文件名

docker  load  <  /home/r-4.0.2.img

 至此,离线环境镜像制作完成,剩余就是使用镜像生成容器,步骤与上面在线安装后续创建容器,使用R的步骤也是一摸一样。

 

三、在使用Rserve时可能遇到Permission denied(权限不够):

  解决方法:执行了以下语句,需要重启R容器生效;

chmod -R 777 /usr/local/lib/R/site-library

四、特别注意:使用Rserve进行与java交互时,要注意:

1、Rserve版本,一定要大于等于1.8.x否则报错

1.1、进入R命令界面,查看Rserve版本(packageVersion("Rserve")) 

1.2、如果版本低,则执行:install.packages("Rserve", "Rserve_1.8-6.tgz", "http://www.rforge.net/")

2、一定要开启远程访问模式,否则java无法连接Rserve:

2.1、先docker stop R402,再次docker start R400启动

2.2、进入容器docker exec -it R400 bash

2.3、使用命令:R CMD Rserve  --RS-enable-remote 开启远程访问

然后即可使用。

 

 

 

Logo

更多推荐