View a markdown version of this page

Docker panoramica dell'ambiente di coda - Deadline Cloud

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Docker panoramica dell'ambiente di coda

L'ambiente di Docker coda predefinito dichiara le estensioni e OpenJD. EXPR WRAP_ACTIONS Le sue azioni di entrata e uscita gestiscono il Docker demone senza root e il contenitore di sessioni sul worker. Tre azioni di avvolgimento sostituiscono le azioni degli ambienti e delle attività interni mentre l'ambiente di coda è attivo.

Il seguente flusso mostra come l'ambiente di coda include un'azione di task:

  1. Il modello di lavoro portatile fornisce un onRun comando e i relativi argomenti.

  2. Il runtime della sessione include l'onRunazione originale all'interno onWrapTaskRun invece di eseguire direttamente il comando.

  3. L'hook passa WrappedAction.CommandWrappedAction.Args, e WrappedAction.Environment a uno script di wrap statico come argomenti separati.

  4. Lo script wrap esegue docker container exec il comando e gli argomenti originali all'interno del contenitore di sessione senza root.

L'onEnterazione dell'ambiente di wrapping avvia il contenitore della sessione e la sua onExit azione arresta il contenitore. Il container bind monta la directory della sessione sullo stesso percorso. Può anche montare in bind-mount lo storage persistente per cache riutilizzabili.

Un modello di lavoro portatile trasmette la sua azione onRun originale al limite on. WrapTaskRun L'azione passa a uno script di wrap statico come WrappedAction valori e viene eseguita all'interno di un contenitore di sessioni senza root. L'ambiente di coda avvia e arresta il contenitore, che monta la directory della sessione e l'archiviazione persistente opzionale.
Azione relativa all'ambiente di codaViene eseguitoScopo
onEnterWorkerAvvia il daemon rootless, si autentica su Amazon ECR, estrae l'immagine e avvia il contenitore della sessione.
onWrapEnvEnterContenitoreEsegue l'azione di invio di un ambiente interno.
onWrapTaskRunContenitoreEsegue il comando e gli argomenti dell'applicazione di ogni attività.
onWrapEnvExitContenitoreEsegue l'azione di uscita di un ambiente interno.
onExitWorkerArresta il contenitore della sessione, il demone senza root e il gestore degli utenti.

L'ambiente di wrapping deve definire tutte e tre le azioni di wrapping. Ogni gancio riceve l'azione originale tramite WrappedAction.CommandWrappedAction.Args, eWrappedAction.Environment. Il seguente modello parziale mostra come l'ambiente predefinito inoltra tali valori:

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}}"

Lo script wrap riceve il comando come vettore di argomenti ed esegue l'azione originale all'interno di rootless Docker come identità non privilegiata. job-user Lo script inoltra dall'host solo le variabili di licenza note basate sull'utilizzo. Non inoltra le AWS credenziali nel contenitore.

L'ambiente predefinito monta la directory di lavoro della sessione sullo stesso percorso. Seleziona le GPU tramite la Container Device Interface (CDI) quando disponibili e propaga lo stato di uscita dell'azione incapsulata. Per i dettagli sulla condivisione dei dati, vedere. Condividi la directory di lavoro della sessione

Personalizza un Docker ambiente di coda

La console crea un ambiente di Docker coda predefinito. È possibile utilizzare tale modello come punto di partenza per montaggi specifici dell'applicazione, variabili di ambiente, reti, selezione delle immagini e opzioni di runtime. Conservate il ciclo di vita del demone senza root, il montaggio sulla directory di sessione e tutti e tre i wrap hook quando personalizzate il modello.

EXPRL'estensione supporta le espressioni condizionali. Il seguente esempio di script di immissione parziale sceglie tra due immagini e aggiunge argomenti GPU solo quando il parametro è vero: UseGpu

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"

È inoltre possibile selezionare uno script wrapper in modo condizionale in ogni hook. La seguente azione parziale sceglie un contenitore wrapper o un host wrapper da un parametro di ambiente di coda:

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}}"

Utilizza la stessa condizione di runtime per, e. onWrapEnvEnter onWrapTaskRun onWrapEnvExit Mantenere tutte le fasi del ciclo di vita nello stesso runtime impedisce a un ambiente interno di entrare in un contesto e uscire da un altro. L'WRAP_ACTIONSestensione richiede tutti e tre gli hook anche quando una condizione seleziona il wrapper host.

Un host wrapper deve applicarsiWrappedAction.Environment, preservare i limiti dell'argomento originale e restituire lo stato di uscita dell'azione avvolta. Passa i valori dei comandi e degli argomenti come vettore di argomenti. Non combinare valori grezzi in una stringa perbash -c. Per le regole di citazione, vediComanda la costruzione e la fuga.

Specifiche OpenJD

La proposta del linguaggio di espressione OpenJD sul GitHub sito Web definisce la valutazione delle espressioni, i percorsi digitati e i simboli di sessione.

La proposta di libreria di funzioni di espressione OpenJD sul GitHub sito Web definisce e le funzioni. flatten repr_*

La proposta di tipi di parametri estesi OpenJD sul GitHub sito Web definisce parametri con valori di elenco che i modelli portatili possono utilizzare.

La proposta di wrap actions in ambiente OpenJD sul GitHub sito Web definisce i tre hook e i tre valori di wrap. WrappedAction.*