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