Docker in R and/or Packrat for Reproducible Science
Docker in R and/or Packrat for Reproducible Science
我不完全确定 Docker 是否足以用于 R 开发,或者我应该与 Packrat 结合使用。我读过几篇文章说 docker 就足够了。唯一支持这一说法的地方是这个post。但是,由于 git2r 安装中的错误,我无法构建该示例。
我的总体目标是完全控制我使用的软件包版本,因此即使软件包稍后升级,我的分析仍然有效。
假设您现在使用某个 docker 图像进行分析。如果您稍后启动 相同的 docker 图像,即不只是相同的名称(例如 rocker/rstudio
)或相同的版本(例如 rocker/rstudio:3.5.0
),而是相同的图像 ID,保证您获得完全相同版本的 R、R 包和系统库。这比 packrat
提供的更多(相同的 R 包版本),但需要您保存 docker 图像。
两者都需要。认为 docker 图像只是源代码的最终产品,包括 Dockerfile 和用于构建最终图像的每条数据。
您应该固定 docker(避免 FROM blah:latest
)基础图像,以确保底层库和工具始终相同。不要使用基础图像,例如 debian/testing,它可能会在 apt-get install
的每个 运行 上发生变化。
如果您在需要重建图像时不使用 packrat,您可能会从一些不再工作的库中获得一段新代码,例如,想想关于您可能使用过的已弃用的功能。
当然还有您自己的代码版本,至少要对其进行标记,以便能够轻松回到过去并再次开始新的构建。
这是您可以做的最低限度,因为 Dockerhub 或 CRAN 存储库损坏之类的事情仍然可能发生。在私有 docker 注册表中保存版本化 docker 图像只是最后一步。
我不完全确定 Docker 是否足以用于 R 开发,或者我应该与 Packrat 结合使用。我读过几篇文章说 docker 就足够了。唯一支持这一说法的地方是这个post。但是,由于 git2r 安装中的错误,我无法构建该示例。
我的总体目标是完全控制我使用的软件包版本,因此即使软件包稍后升级,我的分析仍然有效。
假设您现在使用某个 docker 图像进行分析。如果您稍后启动 相同的 docker 图像,即不只是相同的名称(例如 rocker/rstudio
)或相同的版本(例如 rocker/rstudio:3.5.0
),而是相同的图像 ID,保证您获得完全相同版本的 R、R 包和系统库。这比 packrat
提供的更多(相同的 R 包版本),但需要您保存 docker 图像。
两者都需要。认为 docker 图像只是源代码的最终产品,包括 Dockerfile 和用于构建最终图像的每条数据。
您应该固定 docker(避免 FROM blah:latest
)基础图像,以确保底层库和工具始终相同。不要使用基础图像,例如 debian/testing,它可能会在 apt-get install
的每个 运行 上发生变化。
如果您在需要重建图像时不使用 packrat,您可能会从一些不再工作的库中获得一段新代码,例如,想想关于您可能使用过的已弃用的功能。
当然还有您自己的代码版本,至少要对其进行标记,以便能够轻松回到过去并再次开始新的构建。
这是您可以做的最低限度,因为 Dockerhub 或 CRAN 存储库损坏之类的事情仍然可能发生。在私有 docker 注册表中保存版本化 docker 图像只是最后一步。