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 仓库的目录,意味着可以在容器中构建和测试该代码。
运行 compose.yaml 中的现有工作流
Arrow 仓库根目录下的 compose.yaml 文件概述了许多工作流。例如,您可以使用名为 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