Arrow 兼容各种操作系统、操作系统版本、编译器、R 版本以及其他变量的组合。有时,这些变量的组合意味着在某些环境中发现的行为无法在其他环境中重现。此外,构建 Arrow 的方式也不同,例如,可以使用环境变量来指定可选组件的构建。
所有这一切都意味着,当您诊断错误或测试您有理由相信可能受这些变量影响的新功能时,您可能需要使用与您当前工作环境不同的设置。一种方法是启动一个包含所需设置的 Docker 镜像。
本文提供了在 R 开发中使用 Docker 的基本指南。
如何运行 Docker 容器?
已经为 Arrow 开发人员的便利创建了许多镜像,您可以在 DockerHub 仓库上找到它们。
以下代码显示了您可以用来运行 Docker 容器的示例命令。
这应该在 Arrow 仓库的根目录中运行。
docker run -it -e ARROW_DEPENDENCY_SOURCE=AUTO -v $(pwd):/arrow apache/arrow-dev:r-rhub-ubuntu-release-latest
组件
-
docker run- 运行容器的命令 -
-it- 使用交互式终端运行,以便您可以在容器上运行命令 -
-e ARROW_DEPENDENCY_SOURCE=AUTO- 将环境变量ARROW_DEPENDENCY_SOURCE设置为值AUTO -
-v $(pwd):/arrow- 将当前目录挂载到容器中的/arrow -
apache/arrow-dev- 获取此容器的 DockerHub 仓库 -
r-rhub-ubuntu-release-latest- 镜像标签
一旦您运行此命令,如果您没有该特定镜像的本地副本,它将首先下载,然后才启动容器。
在上面的示例中,挂载本地机器上存储 Arrow 仓库的目录,意味着该代码可以在容器上构建和测试。
从 docker-compose.yml 运行现有工作流程
Arrow 仓库根目录中的文件 docker-compose.yml 中概述了许多工作流程。例如,您可以使用名为 r 的工作流程来测试构建和安装 R 软件包。这很有利,因为您可以使用现有的实用脚本并将其安装到已经安装了 R 的容器上。
这些工作流程也是参数化的,这意味着您可以指定不同的选项(或者只使用默认值,可以在 .env 中找到)
示例 - 手动方式
如果您想运行 RHub 最新的 ubuntu-release 镜像,您可以运行
R_ORG=rhub R_IMAGE=ubuntu-release R_TAG=latest docker compose build r
R_ORG=rhub R_IMAGE=ubuntu-release R_TAG=latest docker compose run r
示例 - 使用 Archery
或者,您可能更喜欢使用 Archery 工具来运行 docker 镜像。这样做的好处是使构建一些具有分层依赖关系的现有 Arrow CI 任务变得更简单,因此例如,您可以在已经预构建了 C++ 代码的容器上构建 R 软件包。
这是我们 CI 使用的相同工具——通过一个名为 Crossbow 的工具。
如果您想运行上面讨论的 r 工作流程,您可以运行
R_ORG=rhub R_IMAGE=ubuntu-release R_TAG=latest archery docker run r