Bake 타깃

Bake 타깃 (Bake targets)

Bake에서 타깃(target)은 빌드 구성을 담는 핵심 단위예요. 각 타깃에 Dockerfile, 태그, 컨텍스트 등을 정의하고, 빌드 명령으로 원하는 타깃을 지정해 실행할 수 있어요.

출처: 문서

본문

타깃 정의하기

타깃은 target 블록으로 정의해요:

target "webapp" {
  dockerfile = "webapp.Dockerfile"
  tags = ["docker.io/username/webapp:latest"]
  context = "https://github.com/username/webapp"
}

빌드할 때 타깃 이름을 인자로 넘겨요:

$ docker buildx bake webapp

여러 타깃을 한 번에 빌드하려면 이름을 공백으로 구분해 나열하면 돼요:

$ docker buildx bake webapp api tests

기본 타깃 (Default target)

인자 없이 docker buildx bake를 실행하면 default라는 이름의 타깃이 빌드돼요:

target "default" {
  dockerfile = "webapp.Dockerfile"
  tags = ["docker.io/username/webapp:latest"]
  context = "https://github.com/username/webapp"
}
$ docker buildx bake

타깃 속성 (Target properties)

타깃 속성은 docker build 명령의 플래그와 대부분 대응돼요. 여기에 Bake만의 몇 가지 추가 속성이 더 있어요. 예를 들어 dockerfile은 컨텍스트를 기준으로 상대 경로로 해석돼요:

target "default" {
  context = "app"
  # resolves to app/src/www/Dockerfile
  dockerfile = "src/www/Dockerfile"
}

타깃에 설정할 수 있는 모든 속성은 Bake 참조(reference) 문서에서 확인할 수 있어요.

타깃 그룹 (Grouping targets)

group 블록으로 여러 타깃을 하나로 묶어 한 번에 빌드할 수 있어요:

group "all" {
  targets = ["webapp", "api", "tests"]
}

target "webapp" {
  dockerfile = "webapp.Dockerfile"
  tags = ["docker.io/username/webapp:latest"]
  context = "https://github.com/username/webapp"
}

target "api" {
  dockerfile = "api.Dockerfile"
  tags = ["docker.io/username/api:latest"]
  context = "https://github.com/username/api"
}

target "tests" {
  dockerfile = "tests.Dockerfile"
  contexts = {
    webapp = "target:webapp"
    api = "target:api"
  }
  output = ["type=local,dest=build/tests"]
  context = "."
}

그룹 이름으로 빌드하면 그룹 안의 모든 타깃이 빌드돼요:

$ docker buildx bake all

타깃·그룹 패턴 매칭 (Pattern matching for targets and groups)

Bake는 타깃이나 그룹을 지정할 때 셸 스타일의 와일드카드 패턴을 지원해요. 덕분에 각각을 일일이 나열하지 않고도 여러 타깃을 쉽게 빌드할 수 있어요.

지원되는 패턴:

  • * : 임의의 문자 시퀀스와 매칭
  • (그 외 셸 와일드카드 문법)

더 알아보기 (Learn more)