

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
<a name="containers-queue-environment"></a>

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.

1. Il runtime della sessione include l'`onRun`azione originale all'interno `onWrapTaskRun` invece di eseguire direttamente il comando.

1. L'hook passa `WrappedAction.Command``WrappedAction.Args`, e `WrappedAction.Environment` a uno script di wrap statico come argomenti separati.

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

L'`onEnter`azione 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.](https://docs.aws.amazon.com/it_it/deadline-cloud/latest/developerguide/images/wrap-actions-flow.png)



| 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.Command``WrappedAction.Args`, e`WrappedAction.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](containers-share-session-directory.md)

## Personalizza un Docker ambiente di coda
<a name="containers-queue-customize"></a>

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.

`EXPR`L'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_ACTIONS`estensione richiede tutti e tre gli hook anche quando una condizione seleziona il wrapper host.

Un host wrapper deve applicarsi`WrappedAction.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 per`bash -c`. Per le regole di citazione, vedi[Comanda la costruzione e la fuga](containers-security.md#containers-security-command-construction).

## Specifiche OpenJD
<a name="containers-openjd-references"></a>

La [proposta del linguaggio di espressione OpenJD](https://github.com/OpenJobDescription/openjd-specifications/blob/mainline/rfcs/0005-expression-language.md) 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](https://github.com/OpenJobDescription/openjd-specifications/blob/mainline/rfcs/0006-expression-function-library.md) sul GitHub sito Web definisce e le funzioni. `flatten` `repr_*`

La [proposta di tipi di parametri estesi OpenJD](https://github.com/OpenJobDescription/openjd-specifications/blob/mainline/rfcs/0007-extend-parameter-types.md) sul GitHub sito Web definisce parametri con valori di elenco che i modelli portatili possono utilizzare.

La [proposta di wrap actions in ambiente OpenJD](https://github.com/OpenJobDescription/openjd-specifications/blob/mainline/rfcs/0008-environment-wrap-actions.md) sul GitHub sito Web definisce i tre hook e i tre valori di wrap. `WrappedAction.*`