使用 Databricks Container Service 自定義容器
Databricks Container Services 可讓您在建立計算時指定 Docker 映射。 一些範例使用案例包括:
- 連結庫自定義:您可以完全控制所要安裝的系統連結庫。
- 黃金容器環境:您的 Docker 映像是永遠不會變更的鎖定環境。
- Docker CI/CD 整合:您可以將 Azure Databricks 與您的 Docker CI/CD 管線整合。
您也可以使用 Docker 映像,透過 GPU 裝置在計算上建立自定義深度學習環境。 如需搭配 Databricks Container Services 使用 GPU 計算的詳細資訊,請參閱 GPU 計算上的 Databricks Container Services。
若要讓每次容器啟動時執行的工作,請使用 init 腳本。
需求
- 您的 Azure Databricks 工作區必須啟用 Databricks Container Services。
- 您的計算機必須執行最近的 Docker 精靈(經測試且可與 Client/Server 18.03.0-ce 版搭配運作的精靈),且
docker
命令必須可在您的PATH
上使用。
限制
- 使用標準存取模式的計算不支援 Databricks Container Services(先前稱為共用存取模式)。
- databricks Runtime for 機器學習 不支援 Databricks Container Services。
- 若要存取 Databricks Container Services 上的磁碟區,請將下列設定新增至計算的 Spark 組態 字段:
spark.databricks.unityCatalog.volumes.enabled true
。 -
172.17.0.0/16
是 Docker 使用的預設 IP 範圍。 若要避免因為IP衝突而造成連線問題,請避免在此子網中設定資源。
步驟 1:建置您的基底
Databricks 建議您從 Databricks 建置和測試的基底建置 Docker 基底。 您也可以從頭開始建置 Docker 基底。 本節描述這兩個選項。
選項 1。 使用 Databricks 所建置的基底
此範例會 9.x
針對以運行時間版本 Databricks Runtime 9.1 LTS 和更新版本為目標的映像使用 標籤:
FROM databricksruntime/standard:9.x
...
若要指定其他 Python 連結庫,例如最新版本的 pandas 和 urllib,請使用 的容器特定版本 pip
。
databricksruntime/standard:9.x
針對容器,請包含下列專案:
RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/bin/pip install urllib3
databricksruntime/standard:8.x
針對容器或更低版本,請包含下列專案:
RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas
RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3
基底映像裝載於位於 https://hub.docker.com/u/databricksruntime的 Docker Hub 上。 用來產生這些基底的 Dockerfiles 位於 https://github.com/databricks/containers。
注意
將會修補具有 「-LTS」 後綴的 Docker Hub 託管映像。 所有其他映像都是範例,且不會定期修補。
注意
基底映像 databricksruntime/standard
和 databricksruntime/minimal
不會與不再提供 Databricks Runtime 與 Conda 的不相關 databricks-standard
和環境 databricks-minimal
混淆(Beta)。
選項 2。 建置您自己的 Docker 基底
您也可以從頭開始建置 Docker 基底。 Docker 映射必須符合下列需求:
- JDK 8u191 作為系統上的Java
PATH
- bash
- iproute2 (ubuntu iproute)
- coreutils (ubuntu coreutils)
- procps (ubuntu procps)
- sudo (ubuntu sudo)
- Ubuntu Linux
若要從頭開始建置您自己的映像,您必須建立虛擬環境。 您也必須包含 Databricks 計算內建的套件,例如 Python 和 R。若要開始使用,您可以使用適當的基底映像:
- 針對 R:
databricksruntime/rbase
- 針對 Python:
databricksruntime/python
- 針對 Databricks 所建置的最低映射:
databricksruntime/minimal
您也可以參考 GitHub 中的 Dockerfiles 範例。
注意
Databricks 建議使用 Ubuntu Linux;不過,您可以使用 Alpine Linux。 若要使用 Alpine Linux,您必須包含下列檔案:
此外,您必須設定 Python,如此 範例 Dockerfile 所示。
警告
在 Azure Databricks 計算上徹底測試您的自定義容器映像。 您的容器可以在本機或建置計算機上運作,但在 Azure Databricks 上啟動容器時,計算啟動可能會失敗,某些功能可能會停用,或您的容器可能會停止運作,甚至以無訊息方式運作。 在最壞的情況下,可能會損毀您的數據,或不小心將數據公開給外部合作物件。
步驟 2:推送您的基底映射
將您的自定義基底映像推送至 Docker 登錄。 下列登入支援此程式:
其他不支持驗證或基本驗證的 Docker 登錄也有望運作。
注意
如果您使用 Docker 登錄的 Docker Hub,請務必檢查速率限制,以配合預期在六小時內啟動的計算量。 匿名使用者、沒有付費訂用帳戶的已驗證使用者和付費訂用帳戶的費率限制不同。 如需詳細資訊,請參閱 Docker 檔 。 如果超過此限制,您將會收到「429 太多要求」回應。
步驟 3:啟動計算
您可以使用 UI 或 API 來啟動計算。
使用UI啟動計算
在 [ 建立計算] 頁面上,指定支援 Databricks Container Services 的 Databricks 運行時間版本。
在 [進階] 中,選取 [Docker] 標籤頁。
選取 [ 使用您自己的 Docker 容器]。
在 [ Docker 映射 URL] 字段中,輸入您的自定義 Docker 映射。
Docker 映射 URL 範例:
登錄 標籤格式 Docker Hub (英文) <organization>/<repository>:<tag>
(例如:databricksruntime/standard:latest
)Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>
選取驗證類型。 您可以使用秘密來儲存使用者名稱和密碼驗證值。 請參閱 Docker 映像驗證。
使用 API 啟動計算
使用 Databricks CLI 以自定義 Docker 基底啟動計算。
databricks clusters create \ --cluster-name <cluster-name> \ --node-type-id Standard_DS3_v2 \ --json '{ "num_workers": 0, "docker_image": { "url": "databricksruntime/standard:latest", "basic_auth": { "username": "<docker-registry-username>", "password": "<docker-registry-password>" } }, "spark_version": "14.3.x-scala2.12" }'
Docker 映像驗證
驗證需求取決於您的 Docker 映像類型。 您也可以使用秘密來儲存驗證使用者名稱和密碼。 請參閱 使用秘密進行驗證。
- 針對公用 Docker 映射,您不需要包含驗證資訊。 在 UI 中,將 [驗證] 設定為 [預設 ]。 針對 API 呼叫,不會 包含
basic_auth
字段。 - 針對私人 Docker 映像,請使用服務主體識別碼和密碼(或適用的秘密)作為使用者名稱和密碼進行驗證。
- 針對 Azure Container Registry,請使用服務主體標識碼和密碼(或適用的密碼)作為使用者名稱和密碼進行驗證。 如需建立服務主體的相關信息,請參閱 Azure Container Registry 服務主體驗證檔 。
使用秘密進行驗證
Databricks Container Service 支援使用秘密進行驗證。 在UI中建立計算資源時,請使用 [驗證] 欄位來選取 [使用者名稱和密碼],然後不要輸入純文字使用者名稱或密碼,而是使用 {{secrets/<scope-name>/<dcs-secret>}}
格式輸入您的密碼。 如果您使用 API,請在 [basic_auth
] 欄位中輸入秘密。
如需建立秘密的資訊,請參閱 秘密管理。
使用 init 腳本
Databricks Container Services 可讓客戶在 Docker 容器中包含 init 腳本。 在大部分情況下,您應該避免 init 腳本,而是直接透過 Docker 進行自定義(使用 Dockerfile)。 不過,某些工作必須在容器啟動時執行,而不是在建置容器時執行。 針對這些工作使用 init 腳本。
例如,假設您想要在自定義容器內執行安全性精靈。 透過映射建置管線,在 Docker 映像中安裝及建置精靈。 然後,新增啟動精靈的init腳本。 在此範例中,init 腳本會包含類似 的 systemctl start my-daemon
行。
在 API 中,您可以將 init 腳本指定為計算規格的一部分,如下所示。 如需詳細資訊,請參閱 叢集 API。
"init_scripts": [
{
"file": {
"destination": "file:/my/local/file.sh"
}
}
]
針對 Databricks Container Services 映射,您也可以將 init 腳本儲存在雲端記憶體中。
當您啟動使用 Databricks Container Services 的計算時,會執行下列步驟:
- VM 是從雲端提供者取得。
- 自訂 Docker 映像會從您的存放庫下載。
- Azure Databricks 會從映射建立 Docker 容器。
- Databricks 執行時間程式代碼會複製到 Docker 容器中。
- init 腳本會執行。 請參閱什麼是 init 指令碼?。
Azure Databricks 會忽略 Docker CMD
和 ENTRYPOINT
基本類型。
啟用容器服務
若要在計算上使用自定義容器,工作區管理員必須啟用 Databricks Container Services。
工作區管理員可以使用 Databricks CLI 啟用 Databricks Container Service。 在 JSON 要求本文中,將 指定 enableDcs
為 true
,如下列範例所示:
databricks workspace-conf set-status \
--json '{"enableDcs": "true"}'