Docker Buildx Bake Inheritance 사용법 완벽 가이드! Target 설정 상속 관리하기

Docker Buildx Bake를 사용하다 보면 프로젝트 규모가 커지면서 여러 Target을 관리해야 합니다.

예:

  • 개발 환경 Target
  • 테스트 환경 Target
  • 운영 환경 Target
  • Production 배포 Target
  • CI 전용 Target

각 Target마다 비슷한 설정을 반복해서 작성하면 관리가 어려워집니다.

예:

target "dev" {

  context = "."

  dockerfile = "Dockerfile"

  platforms = [

    "linux/amd64"

  ]

}


target "production" {

  context = "."

  dockerfile = "Dockerfile"

  platforms = [

    "linux/amd64"

  ]

}

문제:

  • 같은 설정 반복
  • 수정 시 여러 곳 변경 필요
  • 설정 관리 복잡

Docker Buildx Bake에서는 Inheritance(상속) 기능을 사용하여 공통 설정을 하나의 Target에 작성하고 다른 Target에서 재사용할 수 있습니다.

예:

docker-bake.hcl

target "base" {

  context = "."

  dockerfile = "Dockerfile"

  platforms = [

    "linux/amd64"

  ]

}


target "production" {

  inherits = [

    "base"

  ]

  tags = [

    "company/app:v1"

  ]

}

실행:

docker buildx bake production

결과:

base 설정 적용

↓

production Build 실행

이번 글에서는 Docker Buildx Bake Inheritance의 개념부터 Target 상속, 설정 덮어쓰기, 환경별 구성, CI/CD 활용까지 자세히 알아보겠습니다.

Docker Buildx Bake Inheritance란 무엇인가?

Docker Buildx Bake Inheritance는 하나의 Target 설정을 다른 Target이 이어받는 기능입니다.

기본 구조:

Base Target

↓

공통 설정 저장

↓

Dev Target

↓

Production Target

즉, 반복되는 Build 설정을 줄이고 관리하기 쉽게 만드는 기능입니다.

Docker Buildx Bake Inheritance가 필요한 이유

상속 없이 관리하면:

target dev

↓

context

↓

dockerfile

↓

platform


target production

↓

context

↓

dockerfile

↓

platform

같은 설정이 반복됩니다.

Inheritance 사용:

base

↓

공통 설정

↓

여러 Target 공유

장점:

  • 설정 중복 감소
  • 유지보수 편리
  • 환경별 관리 쉬움
  • CI/CD 구조 단순화

Docker Buildx Bake Inheritance 기본 사용법

docker-bake.hcl:

target "common" {

  context = "."

  dockerfile = "Dockerfile"

}


target "app" {

  inherits = [

    "common"

  ]

}

실행:

docker buildx bake app

동작:

common 설정 가져오기

↓

app Target 적용

↓

Build 실행

Docker Buildx Bake 여러 Target 상속하기

하나의 Base Target을 여러 Target에서 사용할 수 있습니다.

예:

target "base" {

  context = "."

  dockerfile = "Dockerfile"

}


target "dev" {

  inherits = [

    "base"

  ]

}


target "production" {

  inherits = [

    "base"

  ]

}

구조:

base

├── dev

└── production

공통 설정을 여러 환경에서 재사용합니다.

Docker Buildx Bake Inheritance 설정 덮어쓰기

상속받은 설정은 변경할 수 있습니다.

예:

Base:

target "base" {

  platforms = [

    "linux/amd64"

  ]

}

Production:

target "production" {

  inherits = [

    "base"

  ]

  platforms = [

    "linux/amd64",

    "linux/arm64"

  ]

}

결과:

base

↓

amd64


production

↓

amd64 + arm64

필요한 값만 변경할 수 있습니다.

Docker Buildx Bake Inheritance와 Args 활용

공통 Build Args:

target "base" {

  args = {

    NODE_VERSION = "20"

  }

}

개발 환경:

target "dev" {

  inherits = [

    "base"

  ]

  args = {

    ENV = "development"

  }

}

운영 환경:

target "production" {

  inherits = [

    "base"

  ]

  args = {

    ENV = "production"

  }

}

결과:

공통 설정

+

환경별 설정

으로 관리됩니다.

Docker Buildx Bake Inheritance와 Tags 관리

Base Target:

target "base" {

  context = "."

}

Production:

target "production" {

  inherits = [

    "base"

  ]

  tags = [

    "company/app:v1.0.0"

  ]

}

Dev:

target "dev" {

  inherits = [

    "base"

  ]

  tags = [

    "company/app:dev"

  ]

}

하나의 Build 구조에서 환경별 Image를 관리할 수 있습니다.

Docker Buildx Bake Inheritance와 CI/CD 활용

CI/CD에서는 공통 Build 설정 관리가 중요합니다.

예:

target "ci-base" {

  cache-from = [

    "type=gha"

  ]

  cache-to = [

    "type=gha,mode=max"

  ]

}


target "production" {

  inherits = [

    "ci-base"

  ]

}

효과:

CI 공통 설정

↓

모든 Build Target 적용

Pipeline 관리가 쉬워집니다.

Docker Buildx Bake Inheritance 실무 예제

프로젝트:

project/

├── Dockerfile

├── docker-bake.hcl

└── deploy.yaml

docker-bake.hcl:

target "base" {

  context = "."

  dockerfile = "Dockerfile"

  platforms = [

    "linux/amd64"

  ]

}


target "dev" {

  inherits = [

    "base"

  ]

  tags = [

    "company/app:dev"

  ]

  args = {

    ENV = "development"

  }

}


target "production" {

  inherits = [

    "base"

  ]

  tags = [

    "company/app:v1.0.0"

  ]

  platforms = [

    "linux/amd64",

    "linux/arm64"

  ]

  args = {

    ENV = "production"

  }

}

실행:

개발:

docker buildx bake dev

운영:

docker buildx bake production --push

Docker Buildx Bake Inheritance 확인 방법

설정 확인:

docker buildx bake --print production

출력:

상속된 설정 표시

↓

최종 Build 설정 확인

Target 목록:

docker buildx bake --list

Docker Buildx Bake Inheritance 문제 해결

상속 Target 오류

오류:

unknown target base

확인:

docker buildx bake --list

Target 이름을 확인합니다.

설정이 적용되지 않는 경우

확인:

inherits = [

"base"

]

이름이 정확한지 확인합니다.

값이 예상과 다른 경우

확인:

docker buildx bake --print target-name

최종 설정을 확인합니다.

Docker Buildx Bake Inheritance 사용 시 주의사항

첫 번째는 Base Target에는 공통 설정만 넣는 것이 좋습니다.

두 번째는 너무 많은 상속 구조를 만들면 오히려 복잡해질 수 있습니다.

세 번째는 Target 이름 규칙을 정하는 것이 좋습니다.

네 번째는 최종 설정을 --print로 확인하는 습관이 필요합니다.

Best Practice

Docker Buildx Bake Inheritance 활용 방법:

  • 공통 설정 Base 생성
  • 환경별 Target 분리
  • CI 설정 상속
  • 중복 코드 제거
  • 최종 설정 검증
  • 단순한 상속 구조 유지

자주 묻는 질문

Docker Buildx Bake Inheritance는 무엇인가요?

Target 설정을 다른 Target에서 재사용하는 기능입니다.

여러 Target이 하나의 Base를 사용할 수 있나요?

가능합니다.

하나의 Base Target을 여러 환경에서 상속할 수 있습니다.

상속받은 값을 변경할 수 있나요?

가능합니다.

하위 Target에서 원하는 설정을 덮어쓸 수 있습니다.

CI/CD에서도 활용할 수 있나요?

가능합니다.

Cache, Platform, Output 같은 공통 설정 관리에 유용합니다.

마무리

Docker Buildx Bake Inheritance는 복잡한 Docker Build 설정을 효율적으로 관리하기 위한 핵심 기능입니다.

공통 설정을 Base Target에 작성하고 개발, 테스트, 운영 Target에서 재사용하면 Docker Bake 파일을 더욱 깔끔하게 유지할 수 있습니다.

특히 여러 환경을 운영하는 CI/CD Pipeline에서는 Inheritance를 활용하면 설정 중복을 줄이고 안정적인 Build 구조를 만들 수 있습니다.

댓글 남기기