View a markdown version of this page

Docker visão geral do ambiente de filas - Nuvem de prazos

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Docker visão geral do ambiente de filas

O ambiente de Docker fila padrão declara as extensões EXPR e WRAP_ACTIONS OpenJD. Suas próprias ações de entrada e saída gerenciam o Docker daemon sem raiz e o contêiner de sessão no trabalhador. Três ações de encapsulamento substituem as ações de ambientes e tarefas internos enquanto o ambiente de fila está ativo.

O fluxo a seguir mostra como o ambiente de fila encapsula uma ação de tarefa:

  1. O modelo de trabalho portátil fornece um onRun comando e seus argumentos.

  2. O tempo de execução da sessão envolve a onRun ação original em onWrapTaskRun vez de executar o comando diretamente.

  3. O gancho passa WrappedAction.CommandWrappedAction.Args, e WrappedAction.Environment para um script de encapsulamento estático como argumentos separados.

  4. O script de encapsulamento é usado docker container exec para executar o comando e os argumentos originais dentro do contêiner de sessão sem raiz.

A onEnter ação do ambiente de empacotamento inicia o contêiner da sessão e sua onExit ação interrompe o contêiner. O contêiner bind-monta o diretório da sessão no mesmo caminho. Ele também pode vincular e montar armazenamento persistente para caches reutilizáveis.

Um modelo de tarefa portátil passa sua ação OnRun original para o WrapTaskRun limite on. A ação passa para um script de encapsulamento estático como WrappedAction valores e é executada dentro de um contêiner de sessão sem raiz. O ambiente de fila inicia e interrompe o contêiner, que monta o diretório da sessão e o armazenamento persistente opcional.
Ação do ambiente de filaFunciona emFinalidade
onEnterOperadorInicia o daemon sem raiz, autentica no Amazon ECR, extrai a imagem e inicia o contêiner da sessão.
onWrapEnvEnterContêinerExecuta a ação de entrada de um ambiente interno.
onWrapTaskRunContêinerExecuta os comandos e argumentos do aplicativo de cada tarefa.
onWrapEnvExitContêinerExecuta a ação de saída de um ambiente interno.
onExitOperadorInterrompe o contêiner da sessão, o daemon sem raiz e o gerenciador de usuários.

O ambiente de empacotamento deve definir todas as três ações de empacotamento. Cada gancho recebe a ação original por meio de WrappedAction.CommandWrappedAction.Args, WrappedAction.Environment e. O modelo parcial a seguir mostra como o ambiente padrão encaminha esses valores:

specificationVersion: "environment-2023-09" extensions: - WRAP_ACTIONS - EXPR environment: name: DockerContainer script: actions: onWrapEnvEnter: command: bash args: - "{{Env.File.Wrap}}" - "{{ flatten([['-e', e] for e in WrappedAction.Environment]) }}" - "--" - "{{WrappedAction.Command}}" - "{{WrappedAction.Args}}" onWrapTaskRun: command: bash args: - "{{Env.File.Wrap}}" - "{{ flatten([['-e', e] for e in WrappedAction.Environment]) }}" - "--" - "{{WrappedAction.Command}}" - "{{WrappedAction.Args}}" onWrapEnvExit: command: bash args: - "{{Env.File.Wrap}}" - "{{ flatten([['-e', e] for e in WrappedAction.Environment]) }}" - "--" - "{{WrappedAction.Command}}" - "{{WrappedAction.Args}}"

O script wrap recebe o comando como um vetor de argumento e executa a ação original dentro do rootless Docker como a identidade sem job-user privilégios. O script encaminha somente as variáveis de licença baseadas no uso conhecidas do host. Ele não encaminha as AWS credenciais para o contêiner.

O ambiente padrão monta o diretório de trabalho da sessão no mesmo caminho. Ele seleciona GPUs por meio da Container Device Interface (CDI) quando disponível e propaga o status de saída da ação encapsulada. Para obter detalhes sobre o compartilhamento de dados, consulte. Compartilhe o diretório de trabalho da sessão

Personalize um Docker ambiente de filas

O console cria um ambiente de Docker fila padrão. Você pode usar esse modelo como ponto de partida para montagens específicas do aplicativo, variáveis de ambiente, rede, seleção de imagens e opções de tempo de execução. Preserve o ciclo de vida do daemon sem raiz, a montagem do diretório de sessão e todos os três ganchos de encapsulamento ao personalizar o modelo.

A EXPR extensão oferece suporte a expressões condicionais. O exemplo de script de entrada parcial a seguir escolhe entre duas imagens e adiciona argumentos de GPU somente quando o UseGpu parâmetro é verdadeiro:

IMAGE={{ repr_sh(Param.GpuImage if Param.UseGpu else Param.CpuImage) }} GPU_ARGS=({{ repr_sh(['--gpus', 'all'] if Param.UseGpu else []) }}) docker container run \ --rm \ --detach \ "${GPU_ARGS[@]}" \ --mount {{ repr_sh("type=bind,src=" + Session.WorkingDirectory + ",dst=" + Session.WorkingDirectory) }} \ --workdir {{ repr_sh(Session.WorkingDirectory) }} \ "$IMAGE"

Você também pode selecionar um script de wrapper condicionalmente em cada gancho. A ação parcial a seguir escolhe um encapsulador de contêiner ou um encapsulador de host a partir de um parâmetro de ambiente de fila:

onWrapTaskRun: command: bash args: - "{{ Env.File.WrapContainer if Param.RunInContainer else Env.File.WrapHost }}" - "{{ flatten([['-e', e] for e in WrappedAction.Environment]) }}" - "--" - "{{WrappedAction.Command}}" - "{{WrappedAction.Args}}"

Use a mesma condição de tempo de execução para onWrapEnvEnteronWrapTaskRun, onWrapEnvExit e. Manter todas as fases do ciclo de vida no mesmo tempo de execução impede que um ambiente interno entre em um contexto e saia em outro. A WRAP_ACTIONS extensão requer todos os três ganchos, mesmo quando uma condição seleciona o invólucro hospedeiro.

Um wrapper de host deve ser aplicadoWrappedAction.Environment, preservar os limites do argumento original e retornar o status de saída da ação encapsulada. Passe valores de comandos e argumentos como um vetor de argumentos. Não combine valores brutos em uma string parabash -c. Para regras de cotação, consulteComande a construção e a fuga.

Especificações do OpenJD

A proposta da linguagem de expressão OpenJD no GitHub site define avaliação de expressão, caminhos digitados e símbolos de sessão.

A proposta da biblioteca de funções de expressão OpenJD no GitHub site define flatten as repr_* funções.

A proposta de tipos de parâmetros estendidos do OpenJD no GitHub site define parâmetros com valor de lista que os modelos portáteis podem usar.

A proposta de ações de encapsulamento do ambiente OpenJD no GitHub site define os três ganchos e valores de encapsulamento. WrappedAction.*