Extensiones
Las extensiones sirven para hacer tu archivo de Compose más eficiente y simplificar su mantenimiento.
Utiliza el prefijo x- como un elemento de nivel superior para modularizar las configuraciones que quieras reutilizar.
Compose ignora cualquier campo que comience con x-. Esta es la única excepción en la que Compose ignora silenciosamente los campos no reconocidos.
Las extensiones también se pueden utilizar con anclajes y alias (anchors & aliases).
También se pueden utilizar dentro de cualquier estructura en un archivo de Compose donde no se esperen claves definidas por el usuario. Compose las utiliza para habilitar características experimentales, del mismo modo que los navegadores añaden soporte para características de CSS personalizadas
Ejemplo 1
x-custom:
foo:
- bar
- zot
services:
webapp:
image: example/webapp
x-foo: barservice:
backend:
deploy:
placement:
x-aws-role: "arn:aws:iam::XXXXXXXXXXXX:role/foo"
x-aws-region: "eu-west-3"
x-azure-region: "france-central"Ejemplo 2
x-env: &env
environment:
- CONFIG_KEY
- EXAMPLE_KEY
services:
first:
<<: *env
image: my-image:latest
second:
<<: *env
image: another-image:latestEn este ejemplo, las variables de entorno no pertenecen a ninguno de los servicios. Se han extraído por completo al campo de extensión x-env.
Esto define un nuevo nodo que contiene el campo environment. El anclaje YAML &env se utiliza para que ambos servicios puedan hacer referencia al valor del campo de extensión como *env.
Ejemplo 3
x-function: &function
labels:
function: "true"
depends_on:
- gateway
networks:
- functions
deploy:
placement:
constraints:
- 'node.platform.os == linux'
services:
# Node.js proporciona información del SO sobre el nodo (Host)
nodeinfo:
<<: *function
image: functions/nodeinfo:latest
environment:
no_proxy: "gateway"
https_proxy: $https_proxy
# Utiliza `cat` para devolver la respuesta, es la función más rápida de ejecutar.
echoit:
<<: *function
image: functions/alpine:health
environment:
fprocess: "cat"
no_proxy: "gateway"
https_proxy: $https_proxyLos servicios nodeinfo y echoit incluyen la extensión x-function a través del anclaje &function, y luego establecen su imagen y entorno específicos.
Ejemplo 4
Utilizando la fusión de YAML (YAML merge) también es posible utilizar múltiples extensiones y compartir e invalidar atributos adicionales para necesidades específicas:
x-environment: &default-environment
FOO: BAR
ZOT: QUIX
x-keys: &keys
KEY: VALUE
services:
frontend:
image: example/webapp
environment:
<< : [*default-environment, *keys]
YET_ANOTHER: VARIABLENoteLa fusión de YAML solo se aplica a los mapeos y no se puede utilizar con secuencias.
En el ejemplo anterior, las variables de entorno se declaran utilizando la sintaxis de mapeo
FOO: BAR, mientras que la sintaxis de secuencia- FOO=BARsolo es válida cuando no hay fragmentos involucrados.
Notas históricas informativas
Esta sección es informativa. En el momento de redactar este documento, se conoce la existencia de los siguientes prefijos:
| Prefijo | Proveedor/Organización |
|---|---|
| docker | Docker |
| kubernetes | Kubernetes |
Especificación de valores de bytes
Los valores expresan un valor de bytes como una cadena en formato {cantidad}{unidad_de_byte}:
Las unidades admitidas son b (bytes), k o kb (kilobytes), m o mb (megabytes) y g o gb (gigabytes).
2b
1024kb
2048k
300m
1gbEspecificación de duraciones
Los valores expresan una duración como una cadena en el formato {valor}{unidad}.
Las unidades admitidas son us (microsegundos), ms (milisegundos), s (segundos), m (minutos) y h (horas).
Los valores pueden combinar múltiples valores sin separador.
10ms
40s
1m30s
1h5m30s20ms