# Objetivos de matriz


Una estrategia de matriz te permite bifurcar un único objetivo (target) en múltiples variantes diferentes, basándose en los parámetros que especifiques. Esto funciona de manera similar a las [estrategias de matriz para GitHub Actions](https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs). Puedes usar esto para reducir la duplicación en tu definición de Bake.

El atributo `matrix` es un mapa de nombres de parámetros a listas de valores. Bake compila cada combinación posible de valores como un objetivo independiente.

Cada objetivo generado debe tener un nombre único. Para especificar cómo deben resolverse los nombres de los objetivos, utiliza el atributo `name`.

El siguiente ejemplo resuelve el objetivo `app` en `app-foo` y `app-bar`. También utiliza el valor de la matriz para definir la [etapa de compilación del objetivo](/build/bake/reference/#targettarget).

```hcl {title=docker-bake.hcl}
target "app" {
  name = "app-${tgt}"
  matrix = {
    tgt = ["foo", "bar"]
  }
  target = tgt
}
```

```console
$ docker buildx bake --print app
[+] Building 0.0s (0/0)
{
  "group": {
    "app": {
      "targets": [
        "app-foo",
        "app-bar"
      ]
    },
    "default": {
      "targets": [
        "app"
      ]
    }
  },
  "target": {
    "app-bar": {
      "context": ".",
      "dockerfile": "Dockerfile",
      "target": "bar"
    },
    "app-foo": {
      "context": ".",
      "dockerfile": "Dockerfile",
      "target": "foo"
    }
  }
}
```

## Múltiples ejes

Puedes especificar múltiples claves en tu matriz para bifurcar un objetivo en múltiples ejes. Al utilizar múltiples claves de matriz, Bake compila cada variante posible.

El siguiente ejemplo compila cuatro objetivos:

- `app-foo-1-0`
- `app-foo-2-0`
- `app-bar-1-0`
- `app-bar-2-0`

```hcl {title=docker-bake.hcl}
target "app" {
  name = "app-${tgt}-${replace(version, ".", "-")}"
  matrix = {
    tgt = ["foo", "bar"]
    version = ["1.0", "2.0"]
  }
  target = tgt
  args = {
    VERSION = version
  }
}
```

## Múltiples valores por objetivo de matriz

Si deseas diferenciar la matriz en algo más que un solo valor, puedes usar mapas como valores de la matriz. Bake crea un objetivo para cada mapa, y puedes acceder a los valores anidados utilizando la notación de punto.

El siguiente ejemplo compila dos objetivos:

- `app-foo-1-0`
- `app-bar-2-0`

```hcl {title=docker-bake.hcl}
target "app" {
  name = "app-${item.tgt}-${replace(item.version, ".", "-")}"
  matrix = {
    item = [
      {
        tgt = "foo"
        version = "1.0"
      },
      {
        tgt = "bar"
        version = "2.0"
      }
    ]
  }
  target = item.tgt
  args = {
    VERSION = item.version
  }
}
```

