跳至主要內容
在 GitHub 上編輯此頁面

Docker 建置、映像檔和標籤

Apache Superset 社群廣泛使用 Docker 進行 Superset 的開發、發布和生產化。本頁詳細說明我們的 Docker 建置和標籤命名方案,以協助使用者瀏覽我們的產品。

映像檔是使用 GitHub Actions 建置並推送至 Superset Docker Hub 儲存庫。不同組的映像檔會在不同時間建置和/或發布

  • 已發布版本 (release):使用像是 3.0.0latest 標籤發布。
  • 提取請求迭代 (pull_request):對於每個提取請求,當我們積極建置 docker 以驗證建置時,基於安全性考量,我們不會發布這些映像檔,我們只會簡單地 docker build --load
  • 合併至主分支 (push):產生新的 SHA,標籤以 master 為前綴,表示最新的 master 版本。

建置預設值

我們有一組建置「預設值」,每個預設值代表建置參數的組合,主要指向建置的不同目標層和/或基礎映像檔。

以下是透過 build_docker.py 指令碼公開的建置預設值

  • lean:預設的 Docker 映像檔,包含前端和後端。沒有 build_preset 的標籤是精簡建置(例如:latest4.0.03.0.0、...)。lean 建置不包含資料庫驅動程式,這表示您需要自行安裝。這適用於分析資料庫以及中繼資料資料庫。您可能需要根據您為安裝選擇的中繼資料資料庫,來額外安裝 mysqlclientpsycopg2-binary,以及連線至您的分析資料庫所需的驅動程式。
  • dev:用於開發,具有無頭瀏覽器、開發相關工具和 root 存取權。這包括一些常用的資料庫驅動程式,例如 mysqlclientpsycopg2-binary 和其他用於開發/CI 的驅動程式
  • py311,例如 Py311:與 lean 類似,但使用不同的 Python 版本(在此範例中為 3.11)。
  • ci:用於某些 CI 工作負載。
  • websocket:用於支援進階功能的 Superset 叢集。
  • dockerize:由 Helm 使用。

主要標籤範例

  • latest:最新的官方發布建置
  • latest-dev:最新官方發布建置的 -dev 映像檔,具有無頭瀏覽器和 root 存取權。
  • master:來自 master 分支的最新建置,隱含為精簡建置預設值
  • master-dev:與 master 類似,但包含無頭瀏覽器和 root 存取權。
  • pr-5252:PR 5252 中的最新提交。
  • 30948dc401b40982cb7c0dbf6ebbe443b2748c1b-dev:針對此特定 SHA 的建置,可能來自 master 合併或發布。
  • websocket-latest:用於 Superset 叢集的 WebSocket 映像檔。

如需深入了解或修改建置矩陣和標籤慣例,請查看 build_docker.py 指令碼和 docker.yml GitHub 動作。

Dockerfile 中的主要 ARG

  • BUILD_TRANSLATIONS:是否將翻譯建置到映像檔中。對於前端建置,這會告訴 webpack 從 moment-timezone 程式庫中移除除 en 以外的所有地區設定。對於後端,這會跳過編譯 *.po 翻譯檔案
  • DEV_MODE:是否跳過前端建置,這由我們的 docker-compose 開發設定使用,其中我們掛載本機磁碟區並使用 webpack--watch 模式下建置,這表示當您變更本機檔案系統中的程式碼時,webpack 會從用於此目的的 docker 映像檔中不斷重建前端。此 ARG 可讓初始 docker-compose 建置花費更少的時間和資源
  • INCLUDE_CHROMIUM:是否在後端建置中包含 chromium,使其可以用作無頭瀏覽器,以用於與「警示和報表」以及縮圖產生相關的工作負載
  • INCLUDE_FIREFOX:與上述相同,但用於 firefox
  • PY_VER:指定 Python 後端的基礎映像檔,如果您不是在處理向前或向後相容性,我們不建議變更此設定

快取

為了加速建置,我們遵循 Docker 最佳實務並使用 apache/superset-cache

關於資料庫驅動程式

我們的 docker 映像檔幾乎不支援任何資料庫驅動程式,因為每個環境都需要不同的驅動程式,而且維護具有廣泛資料庫支援的建置既有挑戰性(數十個資料庫、Python 驅動程式和 OS 相依性),效率也低(建置時間較長、映像檔較大、圖層快取命中率較低...)。

對於生產用例,我們建議您衍生我們的 lean 映像檔,並為您需要的資料庫新增資料庫支援。

關於支援不同的平台(即 arm64 和 amd64)

目前,所有自動化建置都是多平台的,同時支援 linux/arm64linux/amd64。這使得像 helmdocker compose 等更高層次的建構可以指向這些映像檔,並有效地實現多平台。

提取請求和主要建置是每個平台一個映像檔,以便可以平行處理,並且這些建置的建置矩陣更加稀疏,因為我們不需要在每個平台上建置每個建置預設值,而且通常可以在此處更有選擇性。對於這些建置,我們會在適用的情況下為標籤加上 -arm 後綴。

使用 Apple silicon

Apple 目前這一代的電腦使用基於 ARM 的 CPU,並且在 MAC 上執行的 Docker 似乎需要 linux/arm64/v8(至少一位使用者的 M2 是以這種方式設定的)。將環境變數 DOCKER_DEFAULT_PLATFORM 設定為 linux/amd64 似乎在利用和建構這裡提供的 Superset 建置方面發揮作用。

export DOCKER_DEFAULT_PLATFORM=linux/amd64

據推測,linux/arm64/v8 會更針對這一代的晶片進行最佳化,但在整個 ARM 生態系統中的相容性較低。