

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Docker descripción general del entorno de colas
<a name="containers-queue-environment"></a>

El entorno de Docker colas predeterminado declara las extensiones y OpenJD. `EXPR` `WRAP_ACTIONS` Sus propias acciones de entrada y salida gestionan el Docker daemon desarraigado y el contenedor de sesiones del trabajador. Tres acciones de ajuste sustituyen a las acciones de los entornos y tareas internos mientras el entorno de cola está activo.

El siguiente flujo muestra cómo el entorno de cola envuelve una acción de tarea:

1. La plantilla de trabajo portátil proporciona un `onRun` comando y sus argumentos.

1. El tiempo de ejecución de la sesión incluye la `onRun` acción original `onWrapTaskRun` en lugar de ejecutar el comando directamente.

1. El enlace pasa `WrappedAction.Command``WrappedAction.Args`, y `WrappedAction.Environment` a un script de ajuste estático como argumentos separados.

1. El script wrap se utiliza `docker container exec` para ejecutar el comando y los argumentos originales dentro del contenedor de sesión sin root.

La `onEnter` acción del entorno de empaquetado inicia el contenedor de sesión y su `onExit` acción lo detiene. El contenedor enlaza el directorio de la sesión en la misma ruta. También puede montar almacenamiento persistente de forma binaria para cachés reutilizables.

![Una plantilla de trabajo portátil transfiere su acción onRun original al límite activado. WrapTaskRun La acción pasa a un script de ajuste estático como WrappedAction valores y se ejecuta dentro de un contenedor de sesión sin root. El entorno de colas inicia y detiene el contenedor, que monta el directorio de la sesión y el almacenamiento persistente opcional.](https://docs.aws.amazon.com/es_es/deadline-cloud/latest/developerguide/images/wrap-actions-flow.png)



| Acción del entorno de colas | Se ejecuta en | Finalidad | 
| --- | --- | --- | 
| onEnter | Entorno de trabajo | Inicia el daemon sin root, se autentica en Amazon ECR, extrae la imagen e inicia el contenedor de sesión. | 
| onWrapEnvEnter | Container | Ejecuta la acción de entrada de un entorno interno. | 
| onWrapTaskRun | Container | Ejecuta el comando y los argumentos de la aplicación de cada tarea. | 
| onWrapEnvExit | Container | Ejecuta la acción de salida de un entorno interno. | 
| onExit | Entorno de trabajo | Detiene el contenedor de sesiones, el daemon sin root y el administrador de usuarios. | 

El entorno de empaquetado debe definir las tres acciones de empaquetado. Cada anzuelo recibe la acción original a través de `WrappedAction.Command``WrappedAction.Args`, y`WrappedAction.Environment`. La siguiente plantilla parcial muestra cómo el entorno predeterminado reenvía esos 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}}"
```

El script wrap recibe el comando como un vector de argumentos y ejecuta la acción original dentro de rootless Docker como identidad sin `job-user` privilegios. El script solo reenvía desde el host las variables de licencia conocidas basadas en el uso. No reenvía AWS las credenciales al contenedor.

El entorno predeterminado monta el directorio de trabajo de la sesión en la misma ruta. Selecciona las GPU a través de la interfaz de dispositivo contenedor (CDI) cuando están disponibles y propaga el estado de salida de la acción empaquetada. Para obtener información detallada sobre el intercambio de datos, consulte. [Compartir el directorio de trabajo de la sesión](containers-share-session-directory.md)

## Personalice un Docker entorno de colas
<a name="containers-queue-customize"></a>

La consola crea un entorno de Docker colas predeterminado. Puede usar esa plantilla como punto de partida para los montajes específicos de la aplicación, las variables de entorno, las redes, la selección de imágenes y las opciones de tiempo de ejecución. Al personalizar la plantilla, conserve el ciclo de vida de los daemons sin root, el montaje en el directorio de sesión y los tres elementos envolventes.

La `EXPR` extensión admite expresiones condicionales. El siguiente ejemplo parcial de enter-script elige entre dos imágenes y agrega argumentos de GPU solo cuando el `UseGpu` parámetro es verdadero:

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

También puedes seleccionar un script contenedor de forma condicional en cada enlace. La siguiente acción parcial selecciona un contenedor contenedor o un contenedor anfitrión de un parámetro del entorno de colas:

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

Utilice la misma condición de tiempo de ejecución para`onWrapEnvEnter`, y`onWrapTaskRun`. `onWrapEnvExit` Mantener todas las fases del ciclo de vida en el mismo tiempo de ejecución evita que un entorno interno entre en un contexto y salga en otro. La `WRAP_ACTIONS` extensión requiere los tres enlaces incluso cuando una condición selecciona el contenedor del host.

Se debe aplicar un contenedor anfitrión`WrappedAction.Environment`, conservar los límites de los argumentos originales y devolver el estado de salida de la acción empaquetada. Transfiere los valores de los comandos y argumentos como un vector de argumentos. No combine valores sin procesar en una cadena para`bash -c`. Para conocer las reglas de cotización, consulte[Comanda la construcción y el escape](containers-security.md#containers-security-command-construction).

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

La [propuesta de lenguaje de expresiones OpenJD](https://github.com/OpenJobDescription/openjd-specifications/blob/mainline/rfcs/0005-expression-language.md) del GitHub sitio web define la evaluación de las expresiones, las rutas mecanografiadas y los símbolos de sesión.

La [propuesta de biblioteca de funciones de expresión de OpenJD que aparece](https://github.com/OpenJobDescription/openjd-specifications/blob/mainline/rfcs/0006-expression-function-library.md) en el GitHub sitio web define las funciones `flatten` y las mismas. `repr_*`

La [propuesta de tipos de parámetros ampliados de OpenJD](https://github.com/OpenJobDescription/openjd-specifications/blob/mainline/rfcs/0007-extend-parameter-types.md) que aparece en el GitHub sitio web define parámetros con valores de lista que pueden utilizar las plantillas portátiles.

La [propuesta de acciones de empaquetado del entorno OpenJD que aparece](https://github.com/OpenJobDescription/openjd-specifications/blob/mainline/rfcs/0008-environment-wrap-actions.md) en el GitHub sitio web define los tres puntos y valores de empaquetamiento. `WrappedAction.*`