Personalizar contêineres com o Databricks Container Service
O Databricks Container Services permite especificar uma imagem do Docker ao criar computação. Alguns exemplos de casos de uso incluem:
- Personalização de bibliotecas: você tem controle total sobre as bibliotecas do sistema que deseja instalar.
- Ambiente de contêiner dourado: sua imagem do Docker é um ambiente bloqueado que nunca mudará.
- Integração de CI/CD do Docker: você pode integrar o Azure Databricks com seus pipelines de CI/CD do Docker.
Você também pode usar imagens do Docker para criar ambientes personalizados de aprendizado profundo em computação com dispositivos GPU. Para obter informações adicionais sobre como usar a computação de GPU com Databricks Container Services, consulte Databricks Container Services on GPU compute.
Para que as tarefas sejam executadas sempre que o contêiner for iniciado, use um script init.
Requisitos
- Seu espaço de trabalho do Azure Databricks deve ter os Serviços de Contêiner do Databricks habilitados.
- Sua máquina deve estar executando um daemon Docker recente (um que é testado e funciona com Client/Server Versão 18.03.0-ce) e o
docker
comando deve estar disponível no seuPATH
.
Limitações
- O Databricks Container Services não é suportado na computação usando o modo de acesso compartilhado.
- O Databricks Runtime for Machine Learning não suporta Databricks Container Services.
- Para acessar Volumes no Databricks Container Services, adicione a seguinte configuração ao campo de configuração do Spark da computação:
spark.databricks.unityCatalog.volumes.enabled true
.
Passo 1: Construa a sua base
O Databricks recomenda que você crie sua base do Docker a partir de uma base que o Databricks tenha criado e testado. Também é possível construir sua base Docker do zero. Esta seção descreve as duas opções.
Opção 1. Use uma base construída pela Databricks
Este exemplo usa a 9.x
tag para uma imagem que terá como alvo uma computação com a versão de tempo de execução Databricks Runtime 9.1 LTS e superior:
FROM databricksruntime/standard:9.x
...
Para especificar bibliotecas Python adicionais, como a versão mais recente do pandas e urllib, use a versão específica do contêiner do pip
. Para o databricksruntime/standard:9.x
recipiente, inclua o seguinte:
RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/bin/pip install urllib3
Para o databricksruntime/standard:8.x
recipiente ou inferior, inclua o seguinte:
RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas
RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3
As imagens de base são hospedadas no Docker Hub em https://hub.docker.com/u/databricksruntime. Os Dockerfiles usados para gerar essas bases estão em https://github.com/databricks/containers.
Nota
As imagens hospedadas no Docker Hub com tags com sufixo "-LTS" serão corrigidas. Todas as outras imagens são exemplos e não são corrigidas regularmente.
Nota
As imagens databricksruntime/standard
base e databricksruntime/minimal
não devem ser confundidas com os ambientes não relacionados databricks-standard
e databricks-minimal
incluídos no Databricks Runtime com Conda (Beta) não mais disponível.
Opção 2. Crie sua própria base Docker
Você também pode criar sua base do Docker do zero. A imagem do Docker deve atender aos seguintes requisitos:
- JDK 8u191 como Java no sistema
PATH
- bash
- iproute2 (ubuntu iproute)
- Coreutils (Ubuntu Coreutils)
- Propps (Ubuntu Procps)
- sudo (ubuntu sudo)
- Ubuntu Linux
Para construir sua própria imagem do zero, você deve criar o ambiente virtual. Você também deve incluir pacotes que são incorporados à computação do Databricks, como Python e R. Para começar, você pode usar a imagem base apropriada:
- Para R:
databricksruntime/rbase
- Para Python:
databricksruntime/python
- Para a imagem mínima criada pelo Databricks:
databricksruntime/minimal
Você também pode consultar o exemplo Dockerfiles no GitHub.
Nota
Databricks recomenda o uso do Ubuntu Linux; no entanto, é possível usar o Alpine Linux. Para usar o Alpine Linux, você deve incluir estes arquivos:
Além disso, você deve configurar o Python, como mostrado neste exemplo Dockerfile.
Aviso
Teste sua imagem de contêiner personalizada completamente em uma computação do Azure Databricks. Seu contêiner pode funcionar em uma máquina local ou de compilação, mas quando seu contêiner é iniciado no Azure Databricks, a inicialização de computação pode falhar, certos recursos podem ser desabilitados ou seu contêiner pode parar de funcionar, mesmo silenciosamente. Na pior das hipóteses, pode corromper os seus dados ou expô-los acidentalmente a terceiros.
Passo 2: Empurre a sua imagem base
Envie sua imagem base personalizada para um registro do Docker. Este processo é suportado pelos seguintes registos:
- Docker Hub sem autenticação ou autenticação básica.
- Azure Container Registry com autenticação básica.
Outros registros do Docker que não suportam autenticação ou autenticação básica também devem funcionar.
Nota
Se você usar o Docker Hub para seu registro do Docker, verifique se os limites de taxa acomodam a quantidade de computação que você espera iniciar em um período de seis horas. Esses limites de taxa são diferentes para usuários anônimos, usuários autenticados sem uma assinatura paga e assinaturas pagas. Consulte a documentação do Docker para obter detalhes. Se esse limite for excedido, você receberá uma resposta "429 solicitações demais".
Etapa 3: Inicie sua computação
Você pode iniciar sua computação usando a interface do usuário ou a API.
Inicie sua computação usando a interface do usuário
Na página Criar computação, especifique uma Versão de Tempo de Execução do Databricks que ofereça suporte aos Serviços de Contêiner do Databricks.
Em Opções avançadas, selecione a guia Docker .
Selecione Usar seu próprio contêiner do Docker.
No campo URL da imagem do Docker, insira sua imagem personalizada do Docker.
Exemplos de URL de imagem do Docker:
Registo Formato da etiqueta Docker Hub <organization>/<repository>:<tag>
(por exemplo:databricksruntime/standard:latest
)Registo de Contentores do Azure <your-registry-name>.azurecr.io/<repository-name>:<tag>
Selecione o tipo de autenticação. Você pode usar segredos para armazenar valores de autenticação de nome de usuário e senha. Consulte Usar segredos para autenticação.
Inicie sua computação usando a API
Gere um token de API.
Use a CLI do Databricks para iniciar uma computação com sua base personalizada do Docker.
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" }'
basic_auth
os requisitos dependem do tipo de imagem do Docker:- Para imagens públicas do Docker, não inclua o
basic_auth
campo. - Para imagens privadas do Docker, você deve incluir o
basic_auth
campo, usando um ID da entidade de serviço e senha como nome de usuário e senha. - Para o Registro de Contêiner do Azure, você deve definir o
basic_auth
campo como ID e senha de uma entidade de serviço. Consulte a documentação de autenticação da entidade de serviço do Registro de Contêiner do Azure para obter informações sobre como criar a entidade de serviço. - Você também pode usar um segredo para armazenar informações de autenticação. Consulte Usar segredos para autenticação.
- Para imagens públicas do Docker, não inclua o
Usar um script init
Os Serviços de Contêiner Databricks permitem que os clientes incluam scripts de inicialização no contêiner do Docker. Na maioria dos casos, você deve evitar scripts init e, em vez disso, fazer personalizações através do Docker diretamente (usando o Dockerfile). No entanto, determinadas tarefas devem ser executadas quando o contêiner é iniciado, em vez de quando o contêiner é construído. Use um script init para essas tarefas.
Por exemplo, suponha que você queira executar um daemon de segurança dentro de um contêiner personalizado. Instale e construa o daemon na imagem do Docker por meio do pipeline de construção de imagens. Em seguida, adicione um script init que inicia o daemon. Neste exemplo, o script init incluiria uma linha como systemctl start my-daemon
.
Na API, você pode especificar scripts init como parte da especificação de computação da seguinte maneira. Para obter mais informações, consulte a API de Clusters.
"init_scripts": [
{
"file": {
"destination": "file:/my/local/file.sh"
}
}
]
Para imagens do Databricks Container Services, você também pode armazenar scripts init no armazenamento em nuvem.
As etapas a seguir ocorrem quando você inicia uma computação que usa o Databricks Container Services:
- As VMs são adquiridas do provedor de nuvem.
- A imagem personalizada do Docker é baixada do seu repositório.
- O Azure Databricks cria um contêiner do Docker a partir da imagem.
- O código Databricks Runtime é copiado para o contêiner do Docker.
- Os scripts init são executados. Consulte O que são scripts init?.
O Azure Databricks ignora o Docker CMD
e ENTRYPOINT
as primitivas.
Usar segredos para autenticação
O Databricks Container Service suporta o uso de segredos para autenticação. Ao criar seu recurso de computação, em vez de inserir seu nome de usuário ou senha de texto simples, insira seu segredo usando o {{secrets/<scope-name>/<dcs-secret>}}
formato. Para obter informações sobre como criar segredos, consulte Gerenciar segredos.
Habilitar serviços de contêiner
Para usar contêineres personalizados em sua computação, um administrador de espaço de trabalho deve habilitar os Serviços de Contêiner do Databricks.
Os administradores do espaço de trabalho podem habilitar o Databricks Container Service usando a CLI do Databricks. Em um corpo de solicitação JSON, especifique enableDcs
para true
, como no exemplo a seguir:
databricks workspace-conf set-status \
--json '{"enableDcs": "true"}'