Personalización de contenedores con Databricks Container Services
Databricks Container Services permite especificar una imagen de Docker cuando se crea un clúster. Algunos casos de uso de ejemplo son:
- Personalización de bibliotecas: tiene el control total sobre las bibliotecas del sistema que desea instalar.
- Entorno de contenedor modelo: la imagen de Docker es un entorno bloqueado que no cambia.
- Integración de CI/CD de Docker: puede integrar Azure Databricks con las canalizaciones de CI/CD de Docker.
También puede usar imágenes de Docker para crear entornos de aprendizaje profundo personalizados en clústeres con dispositivos GPU. Para obtener más información sobre el uso de clústeres con GPU con Databricks Container Services, consulte Databricks Container Services en clústeres con GPU.
Para que las tareas se ejecuten cada vez que se inicie el contenedor, use un script de inicialización.
Requisitos
Nota:
Databricks Runtime for Machine Learning y Databricks Runtime for Genomics no admiten Databricks Container Services.
- Databricks Runtime 6.1 o posterior. Si ha usado anteriormente Databricks Container Services, debe actualizar las imágenes base. Vea las imágenes más recientes de https://github.com/databricks/containers etiquetadas con
6.x. - El área de trabajo de Azure Databricks debe tener habilitado Databricks Container Services.
- La máquina debe ejecutar un demonio de Docker reciente (uno que se pruebe y funcione con la versión 18.03.0-ce del cliente/servidor) y el comando
dockerdebe estar disponible enPATH.
Paso 1: Creación de la base
Databricks recomienda crear la base de Docker con una base que Databricks haya creado y probado. También puede crear la base de Docker desde cero. En esta sección, se describen las dos opciones.
Opción 1. Uso de una base creada por Databricks
En este ejemplo, se usa la etiqueta 9.x para una imagen que tendrá como destino un clúster con la versión del entorno de ejecución Databricks Runtime 9.0 y posterior:
FROM databricksruntime/standard:9.x
...
Para especificar bibliotecas de Python adicionales, como la versión más reciente de pandas y urllib, use la versión de pip específica para el contenedor. Para el contenedor datatabricksruntime/standard:9.x, incluya lo siguiente:
RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/bin/pip install urllib3
Para el contenedor datatabricksruntime/standard:8.x o anterior, incluya lo siguiente:
RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas
RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3
Las imágenes base de ejemplo se hospedan en Docker Hub, en https://hub.docker.com/u/databricksruntime. Los Dockerfiles usados para generar estas bases se encuentran en https://github.com/databricks/containers.
Nota:
Las imágenes base databricksruntime/standard y databricksruntime/minimal no deben confundirse con los entornos databricks-standard y databricks-minimal no relacionados que se incluyen en la versión de Databricks Runtime con Conda (Beta), que ya no está disponible.
Opción 2. Creación de su propia base de Docker
También puede crear una base de Docker desde cero. La imagen de Docker debe cumplir los siguientes requisitos:
- JDK 8u191 como Java en el
PATHdel sistema - Bash
- iproute2 (ubuntu iproute)
- coreutils (ubuntu coreutils)
- procps (ubuntu procps)
- sudo (ubuntu sudo)
- Ubuntu Linux
Para crear su propia imagen desde cero, debe crear el entorno virtual. También debe incluir paquetes integrados en clústeres de Databricks, como Python, R y Ganglia. Para empezar, puede usar la imagen base adecuada (es decir, databricksruntime/rbase para R o databricksruntime/python para Python) o consultar el ejemplo Dockerfiles en GitHub. Otra alternativa es comenzar con la imagen mínima creada por Databricks en databricksruntime/minimal.
Nota:
Databricks recomienda usar Ubuntu Linux. Sin embargo, se puede usar Alpine Linux. Para usar Alpine Linux, debe incluir estos archivos:
Además, debe configurar Python, como se muestra en este Dockerfile de ejemplo.
Advertencia
Pruebe la imagen de contenedor personalizada exhaustivamente en un clúster de Azure Databricks. El contenedor puede funcionar en una máquina local o de compilación, pero, al iniciarlo en un clúster de Azure Databricks, puede que dé error y no se inicie, que se deshabiliten algunas características o que el contenedor deje de funcionar, incluso en modo silencioso. En el peor de los casos, podría dañar los datos o exponerlos accidentalmente a entidades externas.
Paso 2: Inserción de la imagen base
Inserte la imagen base personalizada en un registro de Docker. Este proceso es compatible con los registros siguientes:
- Docker Hub sin autenticación o con autenticación básica.
- Azure Container Registry con autenticación básica.
También se espera que funcionen otros registros de Docker que admitan la no autenticación o la autenticación básica.
Nota
Si usa Docker Hub para el registro de Docker, asegúrese de comprobar que los límites de velocidad se ajusten al número de clústeres que espera iniciar en un período de seis horas. Estos límites de velocidad son diferentes para los usuarios anónimos, los usuarios autenticados sin una suscripción de pago y las suscripciones de pago. Consulte la documentación de Docker para obtener más información. Si se supera este límite, obtendrá una respuesta "429 Demasiadas solicitudes".
Paso 3: Ejecución del clúster
Puede iniciar el clúster usando la interfaz de usuario o la API.
Inicio del clúster con la interfaz de usuario
Especifique una versión de Databricks Runtime que admita Databricks Container Services.

Seleccione Use your own Docker container (Usar su propio contenedor de Docker).
En el campo Docker Image URL (Dirección URL de la imagen de Docker), especifique la imagen personalizada de Docker.
Ejemplos de dirección URL de imagen de Docker:
Registro Formato de la etiqueta Docker Hub <organization>/<repository>:<tag>(por ejemplo:databricksruntime/standard:latest)Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>Seleccione el tipo de autenticación.
Inicio del clúster con la API
Use la API Clusters 2.0 para iniciar un clúster con la base de Docker personalizada.
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_authLos requisitos dependen del tipo de imagen de Docker:- Para imágenes de Docker públicas, no incluya el campo
basic_auth. - Para imágenes de Docker privadas, debe incluir el campo
basic_auth, con un identificador de entidad de servicio y una contraseña como nombre de usuario y contraseña. - Para Azure Container Registry, debe establecer el campo
basic_authen el identificador y la contraseña de una entidad de servicio. Consulte Autenticación de Azure Container Registry con entidades de servicio para obtener información sobre cómo crear la entidad de servicio.
- Para imágenes de Docker públicas, no incluya el campo
Uso de un script de inicialización
Los clústeres de Databricks Container Services permiten a los clientes incluir scripts de inicialización en el contenedor de Docker. En la mayoría de los casos, debe evitar los scripts de inicialización y, en su lugar, realizar personalizaciones a través de Docker directamente (mediante Dockerfiles). Sin embargo, ciertas tareas deben ejecutarse cuando se inicia el contenedor, no cuando se crea. Use un script de inicialización para estas tareas.
Por ejemplo, suponga que desea ejecutar un demonio de seguridad dentro de un contenedor personalizado. Instale y compile el demonio en la imagen de Docker a través de la canalización de creación de imágenes. A continuación, agregue un script de inicialización que inicie el demonio. En este ejemplo, el script de inicialización incluiría una línea como systemctl start my-daemon.
En la API, puede establecer scripts de inicialización en la especificación del clúster, como se muestra a continuación. Para obtener más información, consulte InitScriptInfo.
"init_scripts": [
{
"file": {
"destination": "file:/my/local/file.sh"
}
}
]
En el caso de las imágenes de Databricks Container Services, también puede almacenar scripts de inicialización en DBFS o en almacenamiento en la nube.
Cuando se inicia un clúster de Databricks Container Services, se llevan a cabo los siguientes pasos:
- Se adquieren las máquinas virtuales del proveedor de nube.
- Se descarga del repositorio la imagen de Docker personalizada.
- Azure Databricks crea un contenedor de Docker a partir de la imagen.
- Se copia el código de Databricks Runtime en el contenedor de Docker.
- Se ejecutan los scrips de inicialización. Consulte Orden de ejecución de los scripts de inicialización.
Azure Databricks omite los tipos primitivos CMD y ENTRYPOINT de Docker.