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:
O modelo de trabalho portátil fornece um
onRuncomando e seus argumentos.O tempo de execução da sessão envolve a
onRunação original emonWrapTaskRunvez de executar o comando diretamente.O gancho passa
WrappedAction.CommandWrappedAction.Args, eWrappedAction.Environmentpara um script de encapsulamento estático como argumentos separados.O script de encapsulamento é usado
docker container execpara 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.
| Ação do ambiente de fila | Funciona em | Finalidade |
|---|---|---|
onEnter | Operador | Inicia o daemon sem raiz, autentica no Amazon ECR, extrai a imagem e inicia o contêiner da sessão. |
onWrapEnvEnter | Contêiner | Executa a ação de entrada de um ambiente interno. |
onWrapTaskRun | Contêiner | Executa os comandos e argumentos do aplicativo de cada tarefa. |
onWrapEnvExit | Contêiner | Executa a ação de saída de um ambiente interno. |
onExit | Operador | Interrompe 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
A proposta da biblioteca de funções de expressão OpenJDflatten as repr_* funções.
A proposta de tipos de parâmetros estendidos do OpenJD
A proposta de ações de encapsulamento do ambiente OpenJDWrappedAction.*