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

Fragmentos

Con Compose, puedes utilizar las características nativas de YAML para hacer que tu archivo de Compose sea más ordenado y eficiente. Las anclas y alias te ayudan a crear bloques reutilizables. Esto resulta útil si empiezas a identificar configuraciones comunes en múltiples servicios. Contar con bloques reutilizables minimiza los posibles errores.

Los anclajes (anchors) se crean utilizando el símbolo &. El símbolo va seguido del nombre del alias. Puedes utilizar este alias con el símbolo * más adelante para hacer referencia al valor que sigue al anclaje. Asegúrate de que no haya espacio entre los caracteres & y * y el nombre del alias siguiente.

Puedes utilizar más de un anclaje y alias en un mismo archivo de Compose.

Ejemplo 1

volumes:
  db-data: &default-volume
    driver: default
  metrics: *default-volume

En el ejemplo anterior, se crea un anclaje default-volume basado en el volumen db-data. Más adelante se reutiliza con el alias *default-volume para definir el volumen metrics.

La resolución de los anclajes tiene lugar antes de la interpolación de variables, por lo que las variables no se pueden utilizar para establecer anclajes o alias.

Ejemplo 2

services:
  first:
    image: my-image:latest
    environment: &env
      - CONFIG_KEY
      - EXAMPLE_KEY
      - DEMO_VAR
  second:
    image: another-image:latest
    environment: *env

Si tienes un anclaje que quieres utilizar en más de un servicio, utilízalo en combinación con una extensión para facilitar el mantenimiento del archivo de Compose.

Ejemplo 3

Es posible que desees invalidar valores parcialmente. Compose sigue la regla descrita por el tipo de fusión de YAML (YAML merge type).

En el siguiente ejemplo, la especificación del volumen metrics utiliza un alias para evitar repeticiones, pero invalida el atributo name:

services:
  backend:
    image: example/database
    volumes:
      - db-data
      - metrics
volumes:
  db-data: &default-volume
    driver: default
    name: "data"
  metrics:
    <<: *default-volume
    name: "metrics"

Ejemplo 4

También puedes ampliar el anclaje para añadir valores adicionales.

services:
  first:
    image: my-image:latest
    environment: &env
      FOO: BAR
      ZOT: QUIX
  second:
    image: another-image:latest
    environment:
      <<: *env
      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 deben declarar utilizando la sintaxis de mapeo FOO: BAR, mientras que la sintaxis de secuencia - FOO=BAR solo es válida cuando no hay fragmentos involucrados.