跳至內容

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