# Fragmentos




Con Compose, puedes utilizar las características nativas de [YAML](https://www.yaml.org/spec/1.2/spec.html#id2765878) 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

```yml
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](/reference/compose-file/fragments/interpolation/), por lo que las variables no se pueden utilizar para establecer anclajes o alias.

## Ejemplo 2

```yml
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](/reference/compose-file/fragments/extension/) 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)](https://yaml.org/type/merge.html).

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

```yml
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.

```yml
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](https://yaml.org/type/merge.html) 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.

