Freigeben über


Anpassen von Containern mit Databricks-Containerdiensten

Mit Databricks Container Services können Sie ein Docker-Image angeben, wenn Sie Compute erstellen. Im Folgenden finden Sie einige Beispiele für Anwendungsfälle:

  • Bibliotheksanpassung: Sie haben die vollständige Kontrolle über die Systembibliotheken, die Sie installieren möchten.
  • Goldene Containerumgebung: Ihr Docker-Image ist eine gesperrte Umgebung, die sich nie ändert.
  • CI/CD-Integration (Docker): Sie können Azure Databricks mit CI/CD-Pipelines von Docker integrieren.

Sie können Docker-Images auch verwenden, um benutzerdefinierte Deep-Learning-Umgebungen für Berechnungen mit GPU-Geräten zu erstellen. Weitere Informationen zur Verwendung von GPU-Compute mit Databricks-Containerdiensten finden Sie unter Databricks-Containerdienste in GPU-Compute.

Verwenden Sie ein Init-Skript für Aufgaben, die bei jedem Containerstart ausgeführt werden sollen.

Anforderungen

  • Databricks-Containerdienste müssen für Ihren Azure Databricks-Arbeitsbereich aktiviert sein.
  • Auf Ihrem Computer muss ein aktueller Docker-Daemon ausgeführt werden (einer, der getestet wurde und mit der Client- bzw. Serverversion 18.03.0-ce funktioniert). Zudem muss der docker-Befehl in Ihrem PATH verfügbar sein.

Einschränkungen

  • Databricks Container-Dienste werden nicht auf Computern unterstützt, die den Standard-Zugriffsmodus verwenden (früher gemeinsamer Zugriffsmodus).
  • Databricks Runtime für Machine Learning unterstützt keine Databricks-Containerdienste.
  • Um auf Volumes auf Databricks Container-Dienste zuzugreifen, fügen Sie die folgende Konfiguration zum Feld Spark config des Compute hinzu: spark.databricks.unityCatalog.volumes.enabled true.
  • Für den Zugriff auf Verbund-Hive-Metastore auf Databricks Container-Diensten fügen Sie die folgende Konfiguration zum Feld Spark config des Computes hinzu: spark.databricks.unityCatalog.hms.federation.enabled true.
  • 172.17.0.0/16 ist der standardmäßige IP-Bereich, der von Docker verwendet wird. Um Konnektivitätsprobleme aufgrund eines IP-Konflikts zu verhindern, vermeiden Sie das Einrichten von Ressourcen in diesem Subnetz.

Schritt 1: Erstellen Ihrer Basis

Databricks empfiehlt, dass Sie Ihre Docker-Basis aus einer Basis erstellen, die Databricks erstellt und getestet hat. Es ist auch möglich, Ihre Docker-Basis von Grund auf neu zu erstellen. In diesem Abschnitt werden die beiden Optionen beschrieben.

Option 1: Verwenden einer von Databricks erstellten Basis

In diesem Beispiel wird das Tag 9.x für ein Image verwendet, das auf eine Computeressource mit der Runtimeversion der Databricks Runtime 9.1 LTS und höher abzielt:

FROM databricksruntime/standard:9.x
...

Um zusätzliche Python-Bibliotheken anzugeben (z. B. die neueste Version von pandas und urllib), verwenden Sie die containerspezifische Version von pip. Geben Sie für den Container databricksruntime/standard:9.x Folgendes an:

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

Geben Sie für den Container databricksruntime/standard:8.x oder niedriger Folgendes an:

RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas
RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3

Basisimages werden auf Docker Hub unter https://hub.docker.com/u/databricksruntime gehostet. Die Dockerfiles, die zum Generieren dieser Basisimages verwendet werden, befinden sich unter https://github.com/databricks/containers.

Hinweis

In Docker Hub gehostete Images mit Tags mit dem Suffix „-LTS“ werden gepatcht. Alle anderen Images sind Beispiele und werden nicht regelmäßig gepatcht.

Hinweis

Die Basisimages databricksruntime/standard und databricksruntime/minimal dürfen nicht mit den nicht in Verbindung stehenden Umgebungen databricks-standard und databricks-minimal verwechselt werden, die in der nicht mehr verfügbaren Databricks Runtime-Version mit Conda (Beta) verfügbar sind.

Option 2. Erstellen einer eigenen Docker-Basis

Sie können Ihre Docker-Basis auch von Grund auf neu erstellen. Das Docker-Image muss die folgenden Anforderungen erfüllen:

Um Ihr eigenes Image von Grund auf neu zu erstellen, müssen Sie die virtuelle Umgebung erstellen. Sie müssen auch Pakete einbinden, die in Databricks Compute integriert sind, wie z. B. Python und R. Für den Anfang können Sie das entsprechende Basis-Image verwenden:

  • Für R: databricksruntime/rbase
  • Für Python: databricksruntime/python
  • Für das minimale Image, das von Databricks erstellt wird: databricksruntime/minimal

Sie können auch auf die Beispiel-Dockerfiles in GitHub verweisen.

Hinweis

Databricks empfiehlt die Verwendung von Ubuntu Linux. Es ist jedoch möglich, Alpine Linux zu verwenden. Um Alpine Linux verwenden zu können, müssen Sie die folgenden Dateien einschließen:

Darüber hinaus müssen Sie Python wie im Beispieldockerfile gezeigt einrichten.

Warnung

Testen Sie Ihr benutzerdefiniertes Container-Image gründlich auf einem Azure Databricks-Compute. Ihr Container kann auf einem lokalen oder Build-Computer funktionieren, aber wenn Ihr Container auf Azure Databricks gestartet wird, kann der Rechenstart fehlschlagen, bestimmte Funktionen können deaktiviert werden, oder Ihr Container kann aufhören zu funktionieren, sogar lautlos. Im schlimmsten Fall können Ihre Daten beschädigt oder versehentlich für externe Parteien freigegeben werden.

Schritt 2: Pushen des Basisimage

Pushen Sie Ihr benutzerdefiniertes Basisimage an eine Docker-Registrierung. Dieser Prozess wird für die folgenden Registrierungen unterstützt:

Andere Docker-Registrierungen, die keine Authentifizierung bzw. die Basisauthentifizierung unterstützen, funktionieren ebenfalls.

Hinweis

Wenn Sie Docker Hub für Ihre Docker-Registry verwenden, stellen Sie sicher, dass die Ratengrenzwerte der Menge an Datenverarbeitung entsprechen, die Sie in einem Zeitraum von sechs Stunden starten möchten. Diese Ratenbeschränkungen unterscheiden sich bei anonymen Benutzer*innen, authentifizierten Benutzer*innen ohne kostenpflichtiges Abonnement und kostenpflichtigen Abonnements. Weitere Informationen finden Sie in der Dokumentation zu Docker. Wenn dieser Grenzwert überschritten wird, erhalten Sie die Antwort „429 – Zu viele Anforderungen“.

Schritt 3: Starten Ihrer Berechnung

Sie können Ihre Berechnung über die Benutzeroberfläche oder die API starten.

Starten der Berechnung mithilfe der Benutzeroberfläche

  1. Geben Sie auf der Berechnung erstellen Seite eine Databricks Runtime Version an, die Databricks Container Services unterstützt.

  2. Wählen Sie unter "Erweitert" die Registerkarte "Docker " aus.

  3. Klicken Sie auf Use your own Docker container (Eigenen Docker-Container verwenden).

  4. Geben Sie im Feld URL des Docker-Images Ihr benutzerdefiniertes Docker-Image ein.

    Beispiele für die URL des Docker-Images:

    Registrierung Tagformat
    Docker Hub <organization>/<repository>:<tag> (zum Beispiel: databricksruntime/standard:latest)
    Azure Container Registry (Registrierungsdienst für Container von Azure) <your-registry-name>.azurecr.io/<repository-name>:<tag>
  5. Wählen Sie den Authentifizierungstyp aus. Sie können geheime Schlüssel verwenden, um Benutzernamen- und Kennwortauthentifizierungswerte zu speichern. Siehe Docker-Imageauthentifizierung.

Starten der Berechnung mithilfe der API

  1. Generieren Sie ein API-Token.

  2. Verwenden Sie die Databricks-CLI, um einen Computevorgang mit Ihrer benutzerdefinierten Docker-Basis zu starten.

    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-Imageauthentifizierung

Die Authentifizierungsanforderungen hängen vom Docker-Imagetyp ab. Sie können auch geheime Schlüssel verwenden, um Authentifizierungsbenutzernamen und Kennwörter zu speichern. Weitere Informationen finden Sie unter Verwenden von geheimen Schlüsseln für die Authentifizierung.

  • Für öffentliche Docker-Images müssen Sie keine Authentifizierungsinformationen einschließen. Legen Sie in der Benutzeroberfläche die Authentifizierung auf "Standard" fest. Für den API-Aufruf geben Sie die basic_auth-Felder nicht an.
  • Für private Docker-Images authentifizieren Sie sich mit einer ID des Dienstprinzipals und einem Kennwort (oder anwendbaren Secrets) als Benutzernamen und Kennwort.
  • Für Azure Container Registry authentifizieren Sie sich mit einer ID des Dienstprinzipals und einem Kennwort (oder anwendbaren Secrets) als Benutzernamen und Kennwort. Weitere Informationen zum Erstellen des Dienstprinzipals finden Sie unter Azure Container Registry-Authentifizierung mit Dienstprinzipalen.

Verwenden von geheimen Schlüsseln für die Authentifizierung

Der Databricks-Containerdienst unterstützt die Verwendung geheimer Schlüssel für die Authentifizierung. Wenn Sie Ihre Computerressource in der Benutzeroberfläche erstellen, verwenden Sie das Feld Authentifizierung, um Benutzername und Kennwort auszuwählen. Anstatt Ihren Benutzernamen oder Ihr Kennwort im Klartext einzugeben, geben Sie Ihre Geheimnisse mithilfe des {{secrets/<scope-name>/<dcs-secret>}}-Formats ein. Wenn Sie die API verwenden, geben Sie die geheimen Schlüssel in die basic_auth Felder ein.

Informationen zum Erstellen geheimer Schlüssel finden Sie unter "Geheime Verwaltung".

Verwenden eines Initialisierungsskripts

Databricks Container Services ermöglichen es Kunden, Init-Skripte in den Docker-Container einzubinden. In den meisten Fällen sollten Sie Init-Skripts vermeiden und stattdessen Anpassungen direkt über Docker vornehmen (mithilfe des Dockerfile). Bestimmte Aufgaben müssen jedoch beim Starten des Containers und nicht beim Erstellen ausgeführt werden. Verwenden Sie ein Init-Skript für diese Aufgaben.

Angenommen, Sie möchten einen Sicherheitsdaemon in einem benutzerdefinierten Container ausführen. Installieren und erstellen Sie den Daemon im Docker-Image über Ihre Imagebuildpipeline. Fügen Sie dann ein Init-Skript hinzu, das den Daemon startet. In diesem Beispiel würde das Init-Skript eine Zeile wie systemctl start my-daemon enthalten.

In der API können Sie Init-Skripte als Teil der Berechnungsspezifikation wie folgt angeben. Weitere Informationen finden Sie in der Cluster-API.

"init_scripts": [
    {
        "file": {
            "destination": "file:/my/local/file.sh"
        }
    }
]

Für Databricks-Containerdienstimages können Sie auch Init-Skripts im Cloudspeicher speichern.

Die folgenden Schritte finden statt, wenn Sie eine Berechnung starten, die Databricks Container Services verwendet:

  1. VMs werden vom Cloudanbieter bezogen.
  2. Das benutzerdefinierte Docker-Image wird aus Ihrem Repository heruntergeladen.
  3. Azure Databricks erstellt einen Docker-Container aus dem Image.
  4. Databricks Runtime-Code wird in den Docker-Container kopiert.
  5. Die Initskripts werden ausgeführt. Weitere Informationen finden Sie unter Was sind Initskripts?.

Azure Databricks ignoriert die Docker-Primitive CMD und ENTRYPOINT.

Aktivieren von Containerdiensten

Um benutzerdefinierte Container bei Ihrer Berechnung zu verwenden, muss ein Workspace-Administrator Databricks Container Services aktivieren.

Arbeitsbereichsadministratoren können den Databricks-Containerdienst mithilfe der Databricks-CLI aktivieren. Geben Sie für enableDcs in einem JSON-Anforderungstext den Wert true an, wie im folgenden Beispiel angezeigt:

databricks workspace-conf set-status \
--json '{"enableDcs": "true"}'