Docker 建置、映像檔和標籤
Apache Superset 社群廣泛使用 Docker 進行 Superset 的開發、發布和生產化。本頁詳細說明我們的 Docker 建置和標籤命名方案,以協助使用者瀏覽我們的產品。
映像檔是使用 GitHub Actions 建置並推送至 Superset Docker Hub 儲存庫。不同組的映像檔會在不同時間建置和/或發布
- 已發布版本 (
release
):使用像是3.0.0
和latest
標籤發布。 - 提取請求迭代 (
pull_request
):對於每個提取請求,當我們積極建置 docker 以驗證建置時,基於安全性考量,我們不會發布這些映像檔,我們只會簡單地docker build --load
- 合併至主分支 (
push
):產生新的 SHA,標籤以master
為前綴,表示最新的master
版本。
建置預設值
我們有一組建置「預設值」,每個預設值代表建置參數的組合,主要指向建置的不同目標層和/或基礎映像檔。
以下是透過 build_docker.py
指令碼公開的建置預設值
lean
:預設的 Docker 映像檔,包含前端和後端。沒有 build_preset 的標籤是精簡建置(例如:latest
、4.0.0
、3.0.0
、...)。lean
建置不包含資料庫驅動程式,這表示您需要自行安裝。這適用於分析資料庫以及中繼資料資料庫。您可能需要根據您為安裝選擇的中繼資料資料庫,來額外安裝mysqlclient
或psycopg2-binary
,以及連線至您的分析資料庫所需的驅動程式。dev
:用於開發,具有無頭瀏覽器、開發相關工具和 root 存取權。這包括一些常用的資料庫驅動程式,例如mysqlclient
、psycopg2-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
:與上述相同,但用於 firefoxPY_VER
:指定 Python 後端的基礎映像檔,如果您不是在處理向前或向後相容性,我們不建議變更此設定
快取
為了加速建置,我們遵循 Docker 最佳實務並使用 apache/superset-cache
。
關於資料庫驅動程式
我們的 docker 映像檔幾乎不支援任何資料庫驅動程式,因為每個環境都需要不同的驅動程式,而且維護具有廣泛資料庫支援的建置既有挑戰性(數十個資料庫、Python 驅動程式和 OS 相依性),效率也低(建置時間較長、映像檔較大、圖層快取命中率較低...)。
對於生產用例,我們建議您衍生我們的 lean
映像檔,並為您需要的資料庫新增資料庫支援。
關於支援不同的平台(即 arm64 和 amd64)
目前,所有自動化建置都是多平台的,同時支援 linux/arm64
和 linux/amd64
。這使得像 helm
和 docker 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 生態系統中的相容性較低。