跳到内容

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