跳至内容

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 仓库的目录,意味着可以在容器上构建和测试该代码。

如何退出此镜像?

在 Linux 上,按 Ctrl+D。

如何显示所有保存的镜像?

docker images

如何显示所有正在运行的容器?

docker ps

如何显示所有容器?

sudo docker ps -a

从 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