如何使用正确的R和软件包版本构建Docker映像,然后使用它们打开Rstudio?

如何使用正确的R和软件包版本构建Docker映像,然后使用它们打开Rstudio?,r,docker,R,Docker,我刚刚写完一份手稿,准备在一家科学杂志上发表。我希望我的研究是可复制的,因此除了在Github上共享我的原始和编译的R markdown笔记本外,我还希望在Docker容器中保存我分析数据的环境(包括数据、笔记本以及特定的R和包版本)。此外,我希望任何试图复制我的作品的人都能够在交互式Rstudio会话中执行此代码 我能够用正确的环境创建Dockerfile。以下是一个玩具示例: FROM rocker/r-ver:3.5.1 RUN mkdir /home/working_directory

我刚刚写完一份手稿,准备在一家科学杂志上发表。我希望我的研究是可复制的,因此除了在Github上共享我的原始和编译的R markdown笔记本外,我还希望在Docker容器中保存我分析数据的环境(包括数据、笔记本以及特定的R和包版本)。此外,我希望任何试图复制我的作品的人都能够在交互式Rstudio会话中执行此代码

我能够用正确的环境创建Dockerfile。以下是一个玩具示例:

FROM rocker/r-ver:3.5.1

RUN mkdir /home/working_directory
RUN mkdir /home/working_directory/bin

RUN R -e 'options(repos = \
  list(CRAN = "http://mran.revolutionanalytics.com/snapshot/2019-01-01")); \
  install.packages("ggplot2")'

COPY current/0[1-8]-*.Rmd /home/working_directory/
COPY current/bin/utils.R /home/working_directory/bin/

RUN R
但是,这不允许用户阅读Rmd笔记本并逐行执行代码。一个解决方法是运行image-rocker/rstudio,然后从那里安装软件包,但我希望能够通过一个docker构建调用来实现这一点。不幸的是,我没能做到

干杯

图像应该有您需要的-RStudio在顶部R。如果您特别想要R 3.5.1,您可以在这里找到源代码:

有关如何使用它的更多详细信息,请阅读

仅使用带有特定R版本的预构建图像

# with R version 3.5.1:
docker pull rocker/rstudio:3.5.1
要以交互方式查看图像,请执行以下操作:

docker run --rm -it rocker/rstudio:3.5.1 bash
现在我们可以运行以下示例:

# Check R version
Rscript -e "sessionInfo()[['R.version']][['version.string']]"
# [1] "R version 3.5.1 (2018-07-02)"

# Check RStudio Server version
rstudio-server version
# 1.1.463

# Exit when done
exit

我一直在努力解决这个问题。可以使用特定版本的R通过
docker pull rocker/RStudio
拉动rocker RStudio容器吗?我试过
docker pull-e R_VERSION=3.2.5 rocker/rstudio
但这是R的最新版本,而不是3.2.5。您只需运行
docker pull rocker/rstudio:3.5.2
,这是一个可用标签列表。非常感谢!现在,假设出于再现性目的,我想从MRAN的特定快照安装一个包。我可以添加一行类似于Dockerfile中的行吗?运行R-e选项(repos=\list(CRAN=“);\install.packages(“tidyverse”)“由于系统依赖性的潜在需求,这不是完全直截了当的回答,但如果您特别寻找
tidyverse
,好消息是Rocker项目也有一个与R和R Studio顶部的图像:。如果您严格地想管理版本,那么调整和创建您的ow可能是一个好主意n图像。您可以从使用MRAN快照的
r-ver
中获得灵感,例如在此处搜索MRAN: