为什么要在 Docker 中使用 R? 一位 DevOps 的看法
创始人
2024-03-01 20:59:02
0

opencpu logo

R 语言,一种自由软件编程语言与操作环境,主要用于统计分析、绘图、数据挖掘。R 内置多种统计学及数字分析功能。R 的另一强项是绘图功能,制图具有印刷的素质,也可加入数学符号。——引自维基百科。

已经有几篇关于为什么要在 Docker 中使用 R 的文章。在这篇文章中,我将尝试加入一个 DevOps 的观点,并解释在 OpenCPU 系统的环境中如何使用容器化 R 来构建和部署 R 服务器。

有在 #rstats 世界的人真正地写过为什么他们使用 Docker,而不是如何么?

— Jenny Bryan (@JennyBryan) September 29, 2017

1:轻松开发

OpenCPU 系统的旗舰是 OpenCPU 服务器:它是一个成熟且强大的 Linux 栈,用于在系统和应用程序中嵌入 R。因为 OpenCPU 是完全开源的,我们可以在 DockerHub 上构建和发布。可以使用以下命令启动一个可以立即使用的 OpenCPU 和 RStudio 的 Linux 服务器(使用端口 8004 或 80):

docker run -t -p 8004:8004 opencpu/rstudio

现在只需在你的浏览器打开 http://localhost:8004/ocpu/ 和 http://localhost:8004/rstudio/ 即可!在 rstudio 中用用户 opencpu(密码:opencpu)登录来构建或安装应用程序。有关详细信息,请参阅自述文件

Docker 让开始使用 OpenCPU 变得简单。容器给你一个充分灵活的 Linux 机器,而无需在系统上安装任何东西。你可以通过 rstudio 服务器安装软件包或应用程序,也可以使用 docker exec 进入到正在运行的服务器的 root shell 中:

# Lookup the container ID
docker ps

# Drop a shell
docker exec -i -t eec1cdae3228 /bin/bash

你可以在服务器的 shell 中安装其他软件,自定义 apache2 的 httpd 配置(auth,代理等),调整 R 选项,通过预加载数据或包等来优化性能。

2: 通过 DockerHub 发布和部署

最强大的是,Docker 可以通过 DockerHub 发布和部署。要创建一个完全独立的应用程序容器,只需使用标准的 opencpu 镜像并添加你的程序。

出于本文的目的,我通过在每个仓库中添加一个非常简单的 “Dockerfile”,将一些示例程序打包为 docker 容器。例如:nabelDockerfile 包含以下内容:

FROM opencpu/base

RUN R -e 'devtools::install_github("rwebapps/nabel")'

它采用标准的 opencpu/base 镜像,并从 Github 仓库安装 nabel。最终得到一个完全隔离、独立的程序。任何人可以使用下面这样的命令启动程序:

docker run -d 8004:8004 rwebapps/nabel

-d 代表守护进程监听 8004 端口。很显然,你可以调整 Dockerfile 来安装任何其它的软件或设置你需要的程序。

容器化部署展示了 Docker 的真正能力:它可以发布可以开箱即用的独立软件,而无需安装任何软件或依赖付费托管的服务。如果你更喜欢专业的托管,那会有许多公司乐意在可扩展的基础设施上为你托管 docker 程序。

3: 跨平台构建

还有 Docker 用于 OpenCPU 的第三种方式。每次发布,我们都构建 6 个操作系统的 opencpu-server 安装包,它们在 https://archive.opencpu.org 上公布。这个过程已经使用 DockerHub 完全自动化了。以下镜像从源代码自动构建所有栈:

当 GitHub 上发布新版本时,DockerHub 会自动重建此镜像。要做的就是运行一个脚本,它会取回镜像并将 opencpu-server 二进制复制到归档服务器上


via: https://www.r-bloggers.com/why-use-docker-with-r-a-devops-perspective/

作者:Jeroen Ooms 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

在CentOS系统中为Do...
理解Docker存储的核心机制:驱动与分层管理 在CentOS系统...
2025-06-16 07:41:58
Docker 4.42 版...
IT之家 6 月 12 日消息,科技媒体 linuxiac 昨日(...
2025-06-12 15:13:33
我的docker随笔39:...
本文介绍在容器中修改时间而不影响宿主机的系统时间。 问题提出 某容...
2025-06-01 18:45:21
【Docker】Netwo...
文章目录网络情况查看宿主机网络情况 `ifconfig&#...
2025-06-01 12:34:38
【Docker】Mysql...
文章目录安装mysql主从复制新建主服务器容器实例3307配置文件...
2025-05-31 14:48:56
关于docker mysq...
一,问题描述:         请求...
2025-05-31 01:58:31

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
从 Yum 更新中排除特定/某... 作为系统更新的一部分,你也许需要在基于 Red Hat 系统中由于应用依赖排除一些软件包。如果是,如...