View a markdown version of this page

Docker descripción general del entorno de colas - Nube de plazos

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

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.

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

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

  4. 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.
Acción del entorno de colasSe ejecuta enFinalidad
onEnterEntorno de trabajoInicia el daemon sin root, se autentica en Amazon ECR, extrae la imagen e inicia el contenedor de sesión.
onWrapEnvEnterContainerEjecuta la acción de entrada de un entorno interno.
onWrapTaskRunContainerEjecuta el comando y los argumentos de la aplicación de cada tarea.
onWrapEnvExitContainerEjecuta la acción de salida de un entorno interno.
onExitEntorno de trabajoDetiene 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.CommandWrappedAction.Args, yWrappedAction.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

Personalice un Docker entorno de colas

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 paraonWrapEnvEnter, yonWrapTaskRun. 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ónWrappedAction.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 parabash -c. Para conocer las reglas de cotización, consulteComanda la construcción y el escape.

Especificaciones de OpenJD

La propuesta de lenguaje de expresiones OpenJD 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 en el GitHub sitio web define las funciones flatten y las mismas. repr_*

La propuesta de tipos de parámetros ampliados de OpenJD 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 en el GitHub sitio web define los tres puntos y valores de empaquetamiento. WrappedAction.*