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

使用 Docker Compose



注意

由於 docker compose 主要設計用於在單一主機上執行一組容器,且無法支援高可用性的需求,我們不支援也不建議使用我們的 docker compose 建構來支援生產類型的使用案例。對於單一主機環境,我們建議使用 minikube 以及我們的 在 k8s 上安裝 文件。

如我們的快速入門指南中所述,在本地嘗試 Superset 最快的方式是在 Linux 或 Mac OSX 電腦上使用 Docker Compose。Superset 不正式支援 Windows。這也是快速啟動一個完整功能的開發環境最簡單的方式。

請注意,我們支援 3 種主要方式來執行 docker compose

  1. docker-compose.yml:用於互動式開發,我們會在其中掛載您的本機資料夾,其中包含您可以編輯的前端/後端檔案,並即時體驗您在應用程式中所做的變更
  2. docker-compose-non-dev.yml 我們只根據本機分支建置一個更不可變的映像檔,並讓所有需要的映像檔執行。啟動時本機分支中的變更會反映出來,但在 up 時變更程式碼不會反映在應用程式中
  3. docker-compose-image-tag.yml 我們從 docker-hub 擷取映像檔,例如 3.0.0 版本,並啟動它以便您可以嘗試。這裡本機分支中的內容對正在執行的內容沒有影響,我們只從 docker-hub 擷取並執行預先建置的映像檔。為了讓 docker compose 與啟動的 Postgres 映像檔一起運作,您會想要指向一個帶有 -dev 後綴的 TAG,如 export TAG=4.0.0-devexport TAG=3.0.0-dev,預設值為 latest-dev。這是因為 dev 建置恰好封裝了連接到作為 docker compose 建置一部分啟動的 Postgres 資料庫所需的 psycopg2-binary。``

在設定任一項的需求後,將詳細介紹這兩種方法。

需求

請注意,此文件假設您已安裝 Dockergit。另請注意,我們過去使用 docker-compose,但它正處於淘汰的過程中,因此我們現在改用 docker compose

1. 克隆 Superset 的 GitHub 儲存庫

在您的終端機中使用以下命令克隆 Superset 的儲存庫

git clone --depth=1  https://github.com/apache/superset.git

一旦該命令成功完成,您應該會在目前目錄中看到一個新的 superset 資料夾。

2. 透過 Docker Compose 啟動 Superset

首先,假設您熟悉 docker compose 的機制。在這裡,我們通常會提到 docker compose up,即使在某些情況下,您可能想要使用 docker compose pull 強制檢查較新的遠端映像檔,使用 docker compose build 強制建置,或使用 docker compose build --pull 強制建置最新的基本映像檔。不過,在大多數情況下,簡單的 up 命令就足夠了。有關此主題的詳細資訊,請參閱 docker compose 文件。

選項 #1 - 用於互動式開發環境

docker compose up
提示

在開發模式下執行時,superset-node 容器需要完成建置資產,才能讓 UI 正確呈現。如果您只是想試用 Superset 而不做任何程式碼變更,請按照下面針對 production 或特定版本的文件所述的步驟操作。

提示

依預設,我們在這裡掛載本機 superset-frontend 資料夾,並執行 npm install 以及 npm run dev,這會觸發 webpack 編譯/捆綁前端程式碼。根據您的本機設定,尤其是當您的記憶體小於 16GB 時,執行這些作業可能會非常緩慢。在這種情況下,我們建議您將 env 變數 BUILD_SUPERSET_FRONTEND_IN_DOCKER 設定為 false,並在本機終端機中執行此操作。只需觸發 npm i && npm run dev,這應該會快得多。

選項 #2 - 從本機分支建置一組不可變的映像檔

docker compose -f docker-compose-non-dev.yml up

選項 #3 - 啟動官方版本

export TAG=3.1.1
docker compose -f docker-compose-image-tag.yml up

這裡各種發行標籤、github SHA 和最新的 master 可以由 TAG env 變數引用。請參閱 docker 相關文件,以深入了解您可以從 Docker Hub 指向的現有標籤。

docker compose 提示與設定

注意

屬於 Superset 執行個體的所有內容(圖表、儀表板、使用者等)都儲存在其元資料資料庫中。在生產環境中,應備份此資料庫。使用 docker compose 的預設安裝會將該資料儲存在 Docker 磁碟區中的 PostgreSQL 資料庫中,該磁碟區不會備份。

再次強調,請勿將此用於生產環境

您應該會看到從您機器上啟動的容器串流輸出的記錄。一旦此輸出速度減慢,您應該會在您的本機上擁有一個正在執行的 Superset 執行個體!為了避免未來執行時出現大量的文字,請在 docker compose up 命令的末尾新增 -d 選項。

進一步設定

以下適用於想要設定 Superset 在 Docker Compose 中如何執行的使用者;否則,您可以跳到下一節。

您可以透過遵循 docker/README.md 中提到的步驟,安裝其他 python 套件並套用設定覆寫。

請注意,docker/.env 會設定 docker compose 使用的所有 docker 映像檔的預設環境變數,而 docker/.env-local 可用於覆寫這些預設值。另請注意,docker/.env-local 已在我們的 .gitignore 中引用,防止開發人員冒險將可能敏感的設定提交到儲存庫。

一個重要的變數是 SUPERSET_LOAD_EXAMPLES,它決定了 superset_init 容器是否會將範例資料和視覺化內容填入元資料資料庫中。這些範例有助於學習和測試 Superset,但對於經驗豐富的使用者和生產部署而言是不必要的。載入過程有時可能需要幾分鐘和大量的 CPU,因此您可能需要在資源受限的裝置上停用它。

對於通常在位於您 PYTHONPATH 中的 superset_config.py 檔案中管理,更進階或動態的設定,請注意,可以透過提供 docker/pythonpath_dev/superset_config_docker.py 來完成,該檔案會被 git 忽略(防止您將本機設定提交/推送回儲存庫)。此機制的原理在 docker/pythonpath_dev/superset_config.py 中,您可以在其中看到邏輯執行 from superset_config_docker import *

注意

使用者通常想從 Superset 連線到其他資料庫。目前,最簡單的方法是修改 docker-compose-non-dev.yml 檔案,並將您的資料庫新增為其他服務依賴的服務(透過 x-superset-depends-on)。其他人嘗試在 Superset 服務上設定 network_mode: host,但這些通常會中斷安裝,因為設定需要使用 Docker Compose DNS 解析器來解析服務名稱。如果您對此有良好的解決方案,請告訴我們!

注意

Superset 使用 Scarf Gateway 來收集遙測資料。了解不同 Superset 版本的安裝次數,可為專案的修補和長期支援決策提供參考。Scarf 會清除個人身份資訊 (PII),並且僅提供匯總的統計資料。

若要針對透過 Scarf Gateway 下載的套件選擇退出您的 docker compose 型安裝中的此資料收集,請編輯您的 docker-compose.ymldocker-compose-non-dev.yml 檔案中的 x-superset-image: 行,將 apachesuperset.docker.scarf.sh/apache/superset 取代為 apache/superset,以直接從 Docker Hub 提取映像檔。

若要停用 Scarf 遙測像素,請在您的終端機和/或您的 docker/.env 檔案中將 SCARF_ANALYTICS 環境變數設定為 False

3. 登入 Superset

您的本機 Superset 執行個體還包含一個 Postgres 伺服器,用於儲存您的資料,並且已經預先載入了一些 Superset 隨附的範例資料集。您現在可以透過您的網頁瀏覽器造訪 https://127.0.0.1:8088 來存取 Superset。請注意,許多瀏覽器現在預設為 https - 如果您的瀏覽器是其中之一,請確保它使用 http

使用預設的使用者名稱和密碼登入

username: admin
password: admin

4. 將 Superset 連接到您的本地資料庫實例

當使用 dockerdocker compose 執行 Superset 時,它會在自己的 Docker 容器中執行,就像 Superset 完全是在另一台機器上執行一樣。因此,嘗試使用主機名稱 localhost 連接到您的本地資料庫將無法運作,因為 localhost 指的是 Superset 執行的 Docker 容器,而不是您實際的主機。幸運的是,Docker 提供了一種簡單的方法來從容器內部存取主機中的網路資源,我們將利用此功能連接到我們的本地資料庫實例。

以下說明是如何從 Superset(在 Docker 容器中執行)連接到 postgresql(在您的主機上執行)。其他資料庫的配置可能略有不同,但要點相同,歸結為兩個步驟 -

  1. (Mac 使用者可以跳過此步驟)配置本地 postgresql/資料庫實例以接受公用傳入連線。預設情況下,postgresql 只允許來自 localhost 的傳入連線,並且在 Docker 下,除非您使用 --network=host,否則 localhost 將分別指向主機和 Docker 容器上的不同端點。允許 postgresql 接受來自 Docker 的連線涉及對檔案 postgresql.confpg_hba.conf 進行單行更改;您可以在網路上輕鬆找到針對您的作業系統/PG 版本的相關連結,以完成這項任務。對於 Docker,僅將 IP 位址 172.0.0.0/8 加入白名單而不是 * 就足夠了,但在任何情況下,您都必須注意,在生產資料庫中執行此操作可能會造成災難性的後果,因為您正在將資料庫開放給公共網際網路。
  2. 當嘗試連線到資料庫時,請嘗試使用 host.docker.internal(Mac 使用者、Ubuntu)或 172.18.0.1(Linux 使用者)作為主機名稱,而不是 localhost。這是 Docker 的內部細節 -- 實際情況是,在 Mac 系統中,Docker Desktop 會為主機名稱 host.docker.internal 建立一個 DNS 條目,該條目會解析為主機的正確位址,而在 Linux 中則不是這種情況(至少預設情況下)。如果這兩個主機名稱都不起作用,那麼您可能需要找到您要使用的確切主機名稱,為此您可以執行 ifconfigip addr show 並查看 Docker 為您建立的 docker0 介面的 IP 位址。或者,如果您甚至看不到 docker0 介面,請嘗試(如果需要使用 sudo) docker network inspect bridge 並查看是否有 "Gateway" 的條目並記下 IP 位址。