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:
La plantilla de trabajo portátil proporciona un
onRuncomando y sus argumentos.El tiempo de ejecución de la sesión incluye la
onRunacción originalonWrapTaskRunen lugar de ejecutar el comando directamente.El enlace pasa
WrappedAction.CommandWrappedAction.Args, yWrappedAction.Environmenta un script de ajuste estático como argumentos separados.El script wrap se utiliza
docker container execpara 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.
| 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.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
La propuesta de biblioteca de funciones de expresión de OpenJD que apareceflatten y las mismas. repr_*
La propuesta de tipos de parámetros ampliados de OpenJD
La propuesta de acciones de empaquetado del entorno OpenJD que apareceWrappedAction.*