Compartir comentarios
Las respuestas se generan en base a la documentación.

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: bar
service:
  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:latest

En 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_proxy

Los 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: VARIABLE
Note

La 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=BAR solo 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:

PrefijoProveedor/Organización
dockerDocker
kubernetesKubernetes

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
    1gb

Especificació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