매트릭스 타깃
매트릭스 타깃 (Matrix targets)
매트릭스 전략(matrix strategy)을 쓰면 지정한 매개변수에 따라 단일 타깃을 여러 변형(variant)으로 나눌 수 있어요. 이는 GitHub Actions의 매트릭스 전략과 비슷하게 동작해요. Bake 정의에서 중복을 줄이는 데 유용하답니다.
출처: 문서
본문
matrix 속성은 매개변수 이름을 값 목록으로 매핑한 맵이에요. Bake는 값들의 가능한 모든 조합을 각각 별도의 타깃으로 빌드해요.
생성된 각 타깃은 고유한 이름을 가져야 해요. 타깃 이름이 어떻게 지어져야 하는지는 name 속성으로 지정해요.
아래 예시는 tgt 매트릭스 값을 사용해 타깃 이름과 빌드 스테이지를 동시에 결정해요:
target "app" {
name = "app-${tgt}"
matrix = {
tgt = ["foo", "bar"]
}
target = tgt
}
$ docker buildx bake --print app
{
"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)
matrix에 여러 개의 키를 지정하면 여러 축으로 타깃을 나눌 수 있어요. 여러 매트릭스 키를 쓰면 Bake는 가능한 모든 변형을 빌드해요. 아래 예시는 네 개의 타깃을 빌드해요:
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)
단일 값 이상으로 매트릭스를 구분하고 싶다면, 맵을 매트릭스 값으로 사용할 수 있어요. Bake는 각 맵마다 타깃을 만들고, 점 표기법으로 중첩된 값에 접근할 수 있어요. 아래 예시는 두 개의 타깃을 빌드해요:
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
}
}