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:
Il modello di lavoro portatile fornisce un
onRuncomando e i relativi argomenti.Il runtime della sessione include l'
onRunazione originale all'internoonWrapTaskRuninvece di eseguire direttamente il comando.L'hook passa
WrappedAction.CommandWrappedAction.Args, eWrappedAction.Environmenta uno script di wrap statico come argomenti separati.Lo script wrap esegue
docker container execil 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.
| Azione relativa all'ambiente di coda | Viene eseguito | Scopo |
|---|---|---|
onEnter | Worker | Avvia il daemon rootless, si autentica su Amazon ECR, estrae l'immagine e avvia il contenitore della sessione. |
onWrapEnvEnter | Contenitore | Esegue l'azione di invio di un ambiente interno. |
onWrapTaskRun | Contenitore | Esegue il comando e gli argomenti dell'applicazione di ogni attività. |
onWrapEnvExit | Contenitore | Esegue l'azione di uscita di un ambiente interno. |
onExit | Worker | Arresta 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
La proposta di libreria di funzioni di espressione OpenJDflatten repr_*
La proposta di tipi di parametri estesi OpenJD
La proposta di wrap actions in ambiente OpenJDWrappedAction.*