mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 18:13:42 +08:00 
			
		
		
		
	Merge pull request #1791 from jedevc/docs/bake-reference-matrix
Document new bake matrix builds
This commit is contained in:
		@@ -124,6 +124,8 @@ The following table shows the complete list of attributes that you can assign to
 | 
			
		||||
| [`dockerfile`](#targetdockerfile)               | String  | Dockerfile location                                                  |
 | 
			
		||||
| [`inherits`](#targetinherits)                   | List    | Inherit attributes from other targets                                |
 | 
			
		||||
| [`labels`](#targetlabels)                       | Map     | Metadata for images                                                  |
 | 
			
		||||
| [`matrix`](#targetmatrix)                       | Map     | Define a set of variables that forks a target into multiple targets. |
 | 
			
		||||
| [`name`](#targetname)                           | String  | Override the target name when using a matrix.                        |
 | 
			
		||||
| [`no-cache-filter`](#targetno-cache-filter)     | List    | Disable build cache for specific stages                              |
 | 
			
		||||
| [`no-cache`](#targetno-cache)                   | Boolean | Disable build cache completely                                       |
 | 
			
		||||
| [`output`](#targetoutput)                       | List    | Output destinations                                                  |
 | 
			
		||||
@@ -476,6 +478,138 @@ target "default" {
 | 
			
		||||
It's possible to use a `null` value for labels.
 | 
			
		||||
If you do, the builder uses the label value specified in the Dockerfile.
 | 
			
		||||
 | 
			
		||||
### `target.matrix`
 | 
			
		||||
 | 
			
		||||
A matrix strategy lets you fork a single target into multiple different
 | 
			
		||||
variants, based on parameters that you specify.
 | 
			
		||||
This works in a similar way to [Matrix strategies for GitHub Actions].
 | 
			
		||||
You can use this to reduce duplication in your bake definition.
 | 
			
		||||
 | 
			
		||||
The `matrix` attribute is a map of parameter names to lists of values.
 | 
			
		||||
Bake builds each possible combination of values as a separate target.
 | 
			
		||||
 | 
			
		||||
Each generated target **must** have a unique name.
 | 
			
		||||
To specify how target names should resolve, use the `name` attribute.
 | 
			
		||||
 | 
			
		||||
The following example resolves the `app` target to `app-foo` and `app-bar`.
 | 
			
		||||
It also uses the matrix value to define the [target build stage](#targettarget).
 | 
			
		||||
 | 
			
		||||
```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"
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Multiple axes
 | 
			
		||||
 | 
			
		||||
You can specify multiple keys in your matrix to fork a target on multiple axes.
 | 
			
		||||
When using multiple matrix keys, Bake builds every possible variant.
 | 
			
		||||
 | 
			
		||||
The following example builds four targets:
 | 
			
		||||
 | 
			
		||||
- `app-foo-1-0`
 | 
			
		||||
- `app-foo-2-0`
 | 
			
		||||
- `app-bar-1-0`
 | 
			
		||||
- `app-bar-2-0`
 | 
			
		||||
 | 
			
		||||
```hcl
 | 
			
		||||
target "app" {
 | 
			
		||||
  name = "app-${tgt}-${replace(version, ".", "-")}"
 | 
			
		||||
  matrix = {
 | 
			
		||||
    tgt = ["foo", "bar"]
 | 
			
		||||
    version = ["1.0", "2.0"]
 | 
			
		||||
  }
 | 
			
		||||
  target = tgt
 | 
			
		||||
  args = {
 | 
			
		||||
    VERSION = version
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Multiple values per matrix target
 | 
			
		||||
 | 
			
		||||
If you want to differentiate the matrix on more than just a single value,
 | 
			
		||||
you can use maps as matrix values. Bake creates a target for each map,
 | 
			
		||||
and you can access the nested values using dot notation.
 | 
			
		||||
 | 
			
		||||
The following example builds two targets:
 | 
			
		||||
 | 
			
		||||
- `app-foo-1-0`
 | 
			
		||||
- `app-bar-2-0`
 | 
			
		||||
 | 
			
		||||
```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
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### `target.name`
 | 
			
		||||
 | 
			
		||||
Specify name resolution for targets that use a matrix strategy.
 | 
			
		||||
The following example resolves the `app` target to `app-foo` and `app-bar`.
 | 
			
		||||
 | 
			
		||||
```hcl
 | 
			
		||||
target "app" {
 | 
			
		||||
  name = "app-${tgt}"
 | 
			
		||||
  matrix = {
 | 
			
		||||
    tgt = ["foo", "bar"]
 | 
			
		||||
  }
 | 
			
		||||
  target = tgt
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### `target.no-cache-filter`
 | 
			
		||||
 | 
			
		||||
Don't use build cache for the specified stages.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user