매트릭스 타깃

매트릭스 타깃 (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
  }
}

더 알아보기 (Learn more)