使用 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

步驟 1:建置您的基底

Databricks 建議您從 Databricks 建置和測試的基底建置 Docker 基底。 您也可以從頭開始建置 Docker 基底。 本節描述這兩個選項。

選項 1。 使用 Databricks 所建置的基底

此範例會 9.x 針對以運行時間版本 Databricks Runtime 9.1 LTS 和更新版本為目標的映像使用 標籤:

FROM databricksruntime/standard:9.x
...

若要指定其他 Python 連結庫,例如最新版本的 pandas 和 urllib,請使用 的容器特定版本 pipdatabricksruntime/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/standarddatabricksruntime/minimal 不會與不再提供 Databricks Runtime 與 Conda 的不相關 databricks-standard 和環境 databricks-minimal 混淆(Beta)。

選項 2。 建置您自己的 Docker 基底

您也可以從頭開始建置 Docker 基底。 Docker 映射必須符合下列需求:

若要從頭開始建置您自己的映像,您必須建立虛擬環境。 您也必須包含 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啟動計算

  1. 在 [ 建立計算] 頁面上,指定支援 Databricks Container Services 的 Databricks 運行時間版本。

  2. 在 [進階選項] 下,選取 [Docker] 索引標籤

  3. 選取 [ 使用您自己的 Docker 容器]。

  4. 在 [ Docker 映射 URL] 字段中,輸入您的自定義 Docker 映射。

    Docker 映射 URL 範例:

    登錄 標籤格式
    Docker Hub (英文) <organization>/<repository>:<tag> (例如: databricksruntime/standard:latest
    Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>
  5. 選取驗證類型。

使用 API 啟動計算

  1. 產生 API 令牌

  2. 使用叢集 API 以自訂 Docker 基底啟動計算。

    curl -X POST -H "Authorization: Bearer <token>" https://<databricks-instance>/api/2.0/clusters/create -d '{
      "cluster_name": "<cluster-name>",
      "num_workers": 0,
      "node_type_id": "Standard_DS3_v2",
      "docker_image": {
        "url": "databricksruntime/standard:latest",
        "basic_auth": {
          "username": "<docker-registry-username>",
          "password": "<docker-registry-password>"
        }
      },
      "spark_version": "7.3.x-scala2.12",
    }'
    

    basic_auth 需求取決於您的 Docker 映像類型:

    • 針對公用 Docker 映射, 請勿 包含 basic_auth 欄位。
    • 針對私人 Docker 映像,您必須使用服務主體識別碼和密碼作為使用者名稱和密碼來包含 basic_auth 字段。
    • 針對 Azure Container Registry,您必須將 basic_auth 欄位設定為服務主體的識別碼和密碼。 如需建立服務主體的相關信息,請參閱 Azure Container Registry 服務主體驗證檔

使用 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 的計算時,會執行下列步驟:

  1. VM 是從雲端提供者取得。
  2. 自訂 Docker 映像會從您的存放庫下載。
  3. Azure Databricks 會從映射建立 Docker 容器。
  4. Databricks 執行時間程式代碼會複製到 Docker 容器中。
  5. init 腳本會執行。 請參閱 什麼是 init 腳本?

Azure Databricks 會忽略 Docker CMDENTRYPOINT 基本類型。

啟用容器服務

若要在計算上使用自定義容器,工作區管理員必須啟用 Databricks Container Services。

工作區管理員可以使用 工作區設定 API 來啟用 Databricks Container Service。 在 JSON 要求本文中,將 指定 enableDcstrue,如下列範例所示:

curl -X PATCH -n \
  https://<databricks-instance>/api/2.0/workspace-conf \
  -d '{
    "enableDcs": "true"
    }'