使用Databricks容器服務定製容器

Databricks容器服務允許您在創建集群時指定Docker映像。一些示例用例包括:

  • 庫定製:您可以完全控製想要安裝的係統庫。

  • 黃金容器環境:您的Docker映像是一個鎖定的環境,永遠不會改變。

  • Docker CI/CD集成:您可以將Databricks與您的Docker CI/CD管道集成。

您還可以使用Docker映像在具有GPU設備的集群上創建自定義深度學習環境。有關在Databricks容器服務中使用GPU集群的其他信息,請參見GPU集群上的Databricks Container服務

對於每次容器啟動時都要執行的任務,可以使用init腳本

需求

請注意

Databricks機器學習運行時不支持Databricks容器服務。

  • 您的Databricks工作空間必須具有Databricks容器服務啟用

  • 您的機器必須運行最新的Docker守護進程(經過測試並可與客戶機/服務器版本18.03.0-ce一起工作的守護進程)和碼頭工人命令必須在您的路徑

第一步:建立你的基礎

Databricks建議您在Databricks已經構建和測試過的基礎上構建Docker庫。您也可以從頭開始構建您的Docker基礎。本節介紹這兩個選項。

選項1。使用Databricks構建的基礎

此示例使用9.倍標記的映像將針對運行時版本為Databricks runtime 9.0及以上的集群:

從databricksruntime /標準:9。x……

若要指定其他Python庫,例如pandas和urllib的最新版本,請使用容器特定的版本皮普.為datatabricksruntime /標準:9. x容器,包括以下內容:

RUN /databricks/python3/bin/pip install pandas RUN /databricks/python3/bin/pip install urllib3 . exe

datatabricksruntime /標準:8. x容器或更低,包括以下:

RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3 .使用實例

示例基本映像駐留在Docker Hub上https://hub.docker.com/u/databricksruntime.用於生成這些基礎的dockerfile在https://github.com/databricks/containers

請注意

基本的圖像databricksruntime /標準而且databricksruntime /最小難道不應該和無關的東西混淆嗎databricks-standard而且databricks-minimal包含在不再可用的Databricks運行時with Conda (Beta)中的環境。

第二個選項。建立你自己的Docker基地

您也可以從頭開始構建您的Docker基礎。Docker映像必須滿足以下要求:

要從頭構建自己的映像,必須創建虛擬環境。還必須包含內置到Databricks集群中的包,如Python、R和Ganglia。首先,您可以使用適當的基本映像(即,databricksruntime / rbaseR或databricksruntime / pythonfor Python),或參考示例在GitHub Dockerfiles.另一種選擇是從Databricks構建的最小映像開始databricksruntime /最小

請注意

Databricks建議使用Ubuntu Linux;但是,可以使用Alpine Linux。要使用Alpine Linux,必須包含以下文件:

此外,您必須設置Python,如下所示例子Dockerfile

警告

在Databricks集群上徹底測試自定義容器映像。您的容器可能在本地或構建機器上工作,但是當您的容器在Databricks集群上啟動時,集群啟動可能失敗,某些功能可能被禁用,或者您的容器可能停止工作,甚至是無聲地停止工作。在最壞的情況下,它可能損壞您的數據或意外地將您的數據暴露給外部方。

請注意,您使用Databricks容器服務須遵守服務具體條款

第二步:推送你的基本圖片

將您的自定義基礎映像推到Docker注冊表中。以下注冊表支持此過程:

其他不支持認證或基本認證的Docker注冊表也有望正常工作。

請注意

如果您在Docker注冊表中使用Docker Hub,請務必檢查速率限製是否適應您期望在6小時內啟動的集群數量。對於匿名用戶、未經付費訂閱的身份驗證用戶和付費訂閱,這些速率限製是不同的。看到碼頭工人的文檔獲取詳細信息。如果超出此限製,您將得到“429 Too Many Requests”響應。

步驟3:啟動您的集群

您可以使用UI或API啟動您的集群。

使用UI啟動您的集群

  1. 創建集群頁麵,指定支持Databricks容器服務的Databricks運行時版本。

  2. 高級選項,選擇碼頭工人選項卡。

    選擇磚運行時
  3. 選擇使用您自己的Docker容器

  4. 碼頭工人圖像URL字段,輸入您的自定義Docker映像。

    Docker映像URL示例:

    注冊表

    標簽格式

    碼頭工人中心

    <組織> / <庫>:<標記>(例如:databricksruntime /標準:最新

    亞馬遜ECR

    < aws-account-id > .dkr.ecr。<地區> .amazonaws.com/ <庫>:<標記>

    Azure容器注冊表

    < your-registry-name > .azurecr.io / <存儲庫名>:<標記>

  5. 選擇認證類型。

使用API啟動集群

  1. 生成API令牌

  2. 使用集群API 2.0使用您的自定義Docker基礎啟動集群。

    curl -X POST -H“授權:無記名<標記>”https:// < databricks-instance > / api / 2.0 /集群/創建- d”{:“cluster_name <集群名稱>”,“num_workers”:0,:“node_type_id i3.xlarge”," docker_image ": {“url”:“最新databricksruntime /標準:”," basic_auth ": {“用戶名”:“< docker-registry-username >”,“密碼”:“< docker-registry-password >”},:“spark_version 7.3.x-scala2.12”," aws_attributes ": {“可用性”:“ON_DEMAND”,:“instance_profile_arn攻擊:aws:我::< aws-account-number >: instance-profile / < iam-role-name >”}'

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

    • 對於公開的Docker圖像,包括basic_auth字段。

    • 對於私有Docker映像,必須包含basic_auth字段,使用服務主體ID和密碼作為用戶名和密碼。

    • 對於Azure容器注冊表,必須設置basic_auth字段設置為服務主體的ID和密碼。看到Azure Container Registry服務主體身份驗證文檔有關創建服務主體的信息。

    • 對於Amazon ECR圖像,不包括basic_auth字段。您必須使用實例配置文件包括從映像所在的Docker存儲庫中提取Docker映像的權限。要做到這一點,請遵循使用實例配置文件設置對S3桶的安全訪問的步驟3到步驟5

      下麵是一個IAM角色的例子,它擁有獲取任何圖像的權限。指定的存儲庫< arn-of-repository >

      “版本”“2012-10-17”“聲明”“效應”“允許”“行動”“ecr: GetAuthorizationToken”),“資源”“*”},“效應”“允許”“行動”“ecr: BatchCheckLayerAvailability”“ecr: GetDownloadUrlForLayer”“ecr: GetrepositoryPolicy”“ecr: DescribeRepositories”“ecr: ListImages”“ecr: DescribeImages”“ecr: BatchGetImage”),“資源”“< arn-of-repository >”

      如果Amazon ECR映像駐留在與Databricks集群不同的AWS帳戶中,則使用ECR庫政策之外的集群實例概要來授予Databricks集群訪問權限。下麵是一個ECR存儲庫策略的示例。集群實例配置文件所承擔的IAM角色由< arn-of-IAM-role >

      “版本”“2012-10-17”“聲明”[{“席德”“AllowCrossAccountPush”“效應”“允許”“校長”“AWS”“< arn-of-IAM-role >”},“行動”“ecr: BatchCheckLayerAvailability”“ecr: BatchGetImage”“ecr: DescribeImages”“ecr: DescribeRepositories”“ecr: GetDownloadUrlForLayer”“ecr: GetrepositoryPolicy”“ecr: ListImages”})

使用初始化腳本

Databricks容器服務集群允許客戶在Docker容器中包含初始化腳本。beplay体育app下载地址在大多數情況下,你應該避免初始化腳本,而是直接通過Docker(使用Dockerfile)進行定製。但是,某些任務必須在容器啟動時執行,而不是在容器構建時執行。對這些任務使用初始化腳本。

例如,假設您想在自定義容器中運行安全守護進程。通過映像構建管道在Docker映像中安裝和構建守護進程。然後,添加啟動守護進程的初始化腳本。在本例中,初始化腳本將包含如下一行systemctl開始my-daemon

在API中,您可以將初始化腳本指定為集群規範的一部分,如下所示。有關更多信息,請參見InitScriptInfo

“init_scripts”“文件”“目的地”“文件:/我的/地方/ file.sh”

對於Databricks容器服務映像,您還可以將初始化腳本存儲在DBFS或雲存儲中。

啟動Databricks容器服務集群時,將執行以下步驟:

  1. 虛擬機從雲提供商處獲取。

  2. 自定義Docker映像從您的回購中下載。

  3. Databricks從映像創建Docker容器。

  4. Databricks運行時代碼被複製到Docker容器中。

  5. 執行init腳本。看到初始化腳本執行順序

Databricks忽略DockerCMD而且入口點原語。