Anpassa containrar med Databricks Container Service

Med Databricks Container Services kan du ange en Docker-avbildning när du skapar beräkning. Några exempel på användningsfall är:

  • Biblioteksanpassning: du har fullständig kontroll över de systembibliotek som du vill installera.
  • Gyllene containermiljö: Docker-avbildningen är en låst miljö som aldrig kommer att ändras.
  • Docker CI/CD-integrering: Du kan integrera Azure Databricks med dina Docker CI/CD-pipelines.

Du kan också använda Docker-avbildningar för att skapa anpassade djupinlärningsmiljöer för beräkning med GPU-enheter. Mer information om hur du använder GPU-beräkning med Databricks Container Services finns i Databricks Container Services på GPU-beräkning.

För uppgifter som ska köras varje gång containern startar använder du ett init-skript.

Krav

  • Din Azure Databricks-arbetsyta måste ha Databricks Container Services aktiverat.
  • Datorn måste köra en nyligen installerad Docker-daemon (en som har testats och fungerar med klient-/serverversion 18.03.0-ce) och docker kommandot måste vara tillgängligt på .PATH

Begränsningar

  • Databricks Container Services stöds inte vid beräkning med hjälp av läget för delad åtkomst.
  • Databricks Runtime for Machine Learning stöder inte Databricks Container Services.
  • Om du vill komma åt volymer i Databricks Container Services lägger du till följande konfiguration i beräkningens Spark-konfigurationsfält: spark.databricks.unityCatalog.volumes.enabled true.

Steg 1: Skapa din bas

Databricks rekommenderar att du skapar din Docker-bas från en bas som Databricks har skapat och testat. Du kan också skapa din Docker-bas från grunden. I det här avsnittet beskrivs de två alternativen.

Alternativ 1. Använda en bas som skapats av Databricks

I det här exemplet används taggen 9.x för en avbildning som ska rikta in sig på en beräkning med körningsversionen Databricks Runtime 9.1 LTS och senare:

FROM databricksruntime/standard:9.x
...

Om du vill ange ytterligare Python-bibliotek, till exempel den senaste versionen av Pandas och urllib, använder du den containerspecifika versionen av pip. För containern databricksruntime/standard:9.x inkluderar du följande:

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

För containern databricksruntime/standard:8.x eller lägre inkluderar du följande:

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

Basavbildningar finns på Docker Hub på https://hub.docker.com/u/databricksruntime. De Dockerfiles som används för att generera dessa baser finns på https://github.com/databricks/containers.

Kommentar

Docker Hub-värdbaserade avbildningar med taggar med suffixet "-LTS" kommer att korrigeras. Alla andra bilder är exempel och korrigeras inte regelbundet.

Kommentar

Basavbildningarna databricksruntime/standard och databricksruntime/minimal ska inte förväxlas med de orelaterade databricks-standard och databricks-minimal miljöer som ingår i den inte längre tillgängliga Databricks Runtime med Conda (Beta).

Alternativ 2. Skapa en egen Docker-bas

Du kan också skapa din Docker-bas från grunden. Docker-avbildningen måste uppfylla följande krav:

Om du vill skapa en egen avbildning från grunden måste du skapa den virtuella miljön. Du måste också inkludera paket som är inbyggda i Databricks-beräkning, till exempel Python och R. För att komma igång kan du använda rätt basavbildning:

  • För R: databricksruntime/rbase
  • För Python: databricksruntime/python
  • För den minimala avbildningen som skapats av Databricks: databricksruntime/minimal

Du kan också referera till exemplet Dockerfiles i GitHub.

Kommentar

Databricks rekommenderar att du använder Ubuntu Linux. Det är dock möjligt att använda Alpine Linux. Om du vill använda Alpine Linux måste du inkludera följande filer:

Dessutom måste du konfigurera Python, som du ser i det här exemplet Dockerfile.

Varning

Testa din anpassade containeravbildning noggrant på en Azure Databricks-beräkning. Din container kan fungera på en lokal dator eller byggdator, men när containern startas på Azure Databricks kan beräkningsstarten misslyckas, vissa funktioner kan inaktiveras eller så kan containern sluta fungera, även tyst. I värsta fall kan det skada dina data eller oavsiktligt exponera dina data för externa parter.

Steg 2: Push-överför basavbildningen

Skicka din anpassade basavbildning till ett Docker-register. Den här processen stöds med följande register:

Andra Docker-register som inte stöder någon autentisering eller grundläggande autentisering förväntas också fungera.

Kommentar

Om du använder Docker Hub för Docker-registret kontrollerar du att hastighetsbegränsningarna motsvarar den mängd beräkning som du förväntar dig att starta under en sextimmarsperiod. Dessa prisgränser skiljer sig åt för anonyma användare, autentiserade användare utan en betald prenumeration och betalda prenumerationer. Mer information finns i Docker-dokumentationen. Om den här gränsen överskrids får du svaret "429 för många förfrågningar".

Steg 3: Starta din beräkning

Du kan starta din beräkning med hjälp av användargränssnittet eller API:et.

Starta din beräkning med hjälp av användargränssnittet

  1. På sidan Skapa beräkning anger du en Databricks Runtime-version som stöder Databricks Container Services.

  2. Under Avancerade alternativ väljer du fliken Docker .

  3. Välj Använd din egen Docker-container.

  4. I fältet Docker Image URL anger du din anpassade Docker-avbildning .

    Exempel på Docker-avbildnings-URL:

    Register Taggformat
    Docker Hub <organization>/<repository>:<tag> (till exempel: databricksruntime/standard:latest)
    Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>
  5. Välj autentiseringstyp.

Starta din beräkning med hjälp av API:et

  1. Generera en API-token.

  2. Använd kluster-API:et för att starta en beräkning med din anpassade Docker-bas.

    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 krav beror på din Docker-avbildningstyp:

    • För offentliga Docker-avbildningar ska du inte inkludera fältet basic_auth .
    • För privata Docker-avbildningar måste du inkludera fältet basic_auth med hjälp av ett tjänsthuvudnamns-ID och lösenord som användarnamn och lösenord.
    • För Azure Container Registry måste du ange basic_auth fältet till ID och lösenord för tjänstens huvudnamn. Mer information om hur du skapar tjänstens huvudnamn finns i dokumentationen om autentisering av tjänstens huvudnamn i Azure Container Registry.

Använda ett init-skript

Med Databricks Container Services kan kunder inkludera init-skript i Docker-containern. I de flesta fall bör du undvika init-skript och i stället göra anpassningar via Docker direkt (med Dockerfile). Vissa uppgifter måste dock köras när containern startar, i stället för när containern skapas. Använd ett init-skript för dessa uppgifter.

Anta till exempel att du vill köra en säkerhetsdaemon i en anpassad container. Installera och skapa daemon i Docker-avbildningen via pipelinen för bildskapande. Lägg sedan till ett init-skript som startar daemon. I det här exemplet skulle init-skriptet innehålla en rad som systemctl start my-daemon.

I API:et kan du ange init-skript som en del av beräkningsspecifikationen på följande sätt. Mer information finns i Kluster-API:et.

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

För Databricks Container Services-avbildningar kan du även lagra init-skript i molnlagring.

Följande steg utförs när du startar en beräkning som använder Databricks Container Services:

  1. Virtuella datorer hämtas från molnleverantören.
  2. Den anpassade Docker-avbildningen laddas ned från lagringsplatsen.
  3. Azure Databricks skapar en Docker-container från avbildningen.
  4. Databricks Runtime-kod kopieras till Docker-containern.
  5. Init-skripten körs. Se Vad är init-skript?.

Azure Databricks ignorerar Docker CMD och ENTRYPOINT primitiver.

Aktivera Container Services

Om du vill använda anpassade containrar på din beräkning måste en arbetsyteadministratör aktivera Databricks Container Services.

Arbetsyteadministratörer kan aktivera Databricks Container Service med hjälp av API:et för arbetsytekonfiguration. I en JSON-begärandetext anger du enableDcs till true, som i följande exempel:

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