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