Docker Buildx Bake 상속 사용법 완벽 가이드! 공통 빌드 설정 재사용하기

Docker 프로젝트가 커질수록 여러 이미지의 빌드 설정이 비슷해지는 경우가 많습니다.

예:

  • 동일한 Dockerfile 사용
  • 동일한 플랫폼 설정
  • 동일한 Cache 설정
  • 동일한 Registry Push 설정
  • 동일한 Build Arguments 사용

하지만 각각의 Target에 같은 설정을 반복해서 작성하면 관리가 어려워집니다.

예:

target "backend" {

  platforms = [
    "linux/amd64",
    "linux/arm64"
  ]

  cache-from = [
    "type=registry,ref=company/cache"
  ]

  cache-to = [
    "type=registry,ref=company/cache"
  ]

}


target "frontend" {

  platforms = [
    "linux/amd64",
    "linux/arm64"
  ]

  cache-from = [
    "type=registry,ref=company/cache"
  ]

  cache-to = [
    "type=registry,ref=company/cache"
  ]

}

같은 설정이 반복됩니다.

이러한 문제를 해결하기 위해 Docker Buildx Bake는 상속(Inheritance) 기능을 제공합니다.

상속을 사용하면 공통 설정을 하나의 Target에 작성하고 다른 Target에서 재사용할 수 있습니다.

예:

target "common" {

  platforms = [
    "linux/amd64",
    "linux/arm64"
  ]

}


target "backend" {

  inherits = [
    "common"
  ]

}

backend Target은 common 설정을 그대로 사용할 수 있습니다.

이번 글에서는 Docker Buildx Bake 상속의 개념부터 기본 사용법, 공통 설정 관리, 여러 이미지 빌드 최적화, CI/CD 활용 방법까지 자세히 알아보겠습니다.

Docker Buildx Bake 상속이란 무엇인가?

Docker Buildx Bake 상속은 하나의 Target에 정의된 빌드 설정을 다른 Target에서 가져와 사용하는 기능입니다.

기본 구조:

공통 Target

상속 Target

Docker Image 생성

예:

target "base" {

  platforms = [
    "linux/amd64"
  ]

}


target "app" {

  inherits = [
    "base"
  ]

}

app Target은 base Target의 설정을 사용할 수 있습니다.

Docker Buildx Bake 상속이 필요한 이유

상속을 사용하지 않는 경우:

target "backend" {

  platforms = [
    "linux/amd64"
  ]

}


target "frontend" {

  platforms = [
    "linux/amd64"
  ]

}

문제:

  • 동일 설정 반복
  • 수정할 곳 증가
  • 설정 오류 가능성 증가

상속 사용:

target "base" {

  platforms = [
    "linux/amd64"
  ]

}


target "backend" {

  inherits = [
    "base"
  ]

}


target "frontend" {

  inherits = [
    "base"
  ]

}

장점:

  • 공통 설정 중앙 관리
  • 유지보수 편리
  • 빌드 환경 통일

Docker Buildx Bake 상속 기본 사용법

docker-bake.hcl

target "common" {

  platforms = [
    "linux/amd64",
    "linux/arm64"
  ]

  pull = true

}


target "app" {

  inherits = [
    "common"
  ]

  context = "."

}

실행:

docker buildx bake app

동작:

common 설정 적용

app 빌드 실행

Docker Buildx Bake 여러 Target 상속하기

하나의 공통 Target을 여러 이미지에서 사용할 수 있습니다.

예:

target "base" {

  platforms = [
    "linux/amd64",
    "linux/arm64"
  ]

  pull = true

}


target "backend" {

  inherits = [
    "base"
  ]

  context = "./backend"

}


target "frontend" {

  inherits = [
    "base"
  ]

  context = "./frontend"

}

결과:

backend

base 설정 적용

frontend

base 설정 적용

공통 설정을 재사용할 수 있습니다.

Docker Buildx Bake 상속과 설정 덮어쓰기

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

예:

공통 설정:

target "base" {

  platforms = [
    "linux/amd64"
  ]

}

변경:

target "backend" {

  inherits = [
    "base"
  ]

  platforms = [
    "linux/arm64"
  ]

}

결과:

backend는 ARM64 플랫폼으로 빌드됩니다.

Docker Buildx Bake 상속 실무 활용 예제

공통 운영 설정 관리

docker-bake.hcl

target "production-base" {

  platforms = [
    "linux/amd64",
    "linux/arm64"
  ]

  tags = [
    "company/app:latest"
  ]

}


target "backend" {

  inherits = [
    "production-base"
  ]

  context = "./backend"

}


target "frontend" {

  inherits = [
    "production-base"
  ]

  context = "./frontend"

}

효과:

  • 동일 플랫폼 적용
  • 동일 배포 설정 적용
  • 관리 파일 감소

CI/CD에서 Docker Buildx Bake 상속 활용

CI 환경에서는 공통 배포 설정을 만들어 관리할 수 있습니다.

예:

target "ci-base" {

  pull = true

  cache-from = [
    "type=gha"
  ]

  cache-to = [
    "type=gha"
  ]

}


target "backend" {

  inherits = [
    "ci-base"
  ]

}

효과:

  • 모든 이미지 Cache 적용
  • 동일한 CI 설정 유지
  • 빌드 속도 향상

Docker Buildx Bake 상속과 Group 함께 사용하기

예:

group "default" {

  targets = [
    "backend",
    "frontend"
  ]

}


target "base" {

  platforms = [
    "linux/amd64",
    "linux/arm64"
  ]

}


target "backend" {

  inherits = [
    "base"
  ]

}


target "frontend" {

  inherits = [
    "base"
  ]

}

실행:

docker buildx bake

두 이미지 모두 공통 설정을 적용하여 빌드합니다.

Linux 서버 문제 해결

여러 Docker 이미지를 운영하면서 플랫폼과 Cache 설정을 각각 관리하고 있었습니다.

기존:

target "backend" {

  platforms = [
    "linux/amd64",
    "linux/arm64"
  ]

}


target "frontend" {

  platforms = [
    "linux/amd64",
    "linux/arm64"
  ]

}

문제:

  • 설정 중복
  • 수정 시 여러 곳 변경 필요
  • 실수 발생 가능

상속 적용:

target "base" {

  platforms = [
    "linux/amd64",
    "linux/arm64"
  ]

}


target "backend" {

  inherits = [
    "base"
  ]

}


target "frontend" {

  inherits = [
    "base"
  ]

}

결과:

공통 설정은 한 곳에서 관리하고 모든 이미지에 적용할 수 있었습니다.

Docker Buildx Bake 상속 사용 시 주의사항

첫 번째는 상속 구조를 너무 복잡하게 만들지 않는 것이 좋습니다.

두 번째는 Target 이름을 명확하게 작성해야 합니다.

세 번째는 상속받은 설정이 어떻게 변경되는지 확인해야 합니다.

네 번째는 공통 설정과 개별 설정을 구분하는 것이 중요합니다.

Best Practice

Docker Buildx Bake 상속 활용 방법:

  • 공통 빌드 설정 분리
  • Base Target 생성
  • 환경별 설정 재사용
  • CI/CD 공통 옵션 관리
  • 플랫폼 설정 통합
  • Cache 설정 중앙화

자주 묻는 질문

Docker Buildx Bake 상속은 무엇인가요?

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

여러 이미지에서 사용할 수 있나요?

가능합니다.

Backend, Frontend 등 여러 Target에서 같은 설정을 공유할 수 있습니다.

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

가능합니다.

자식 Target에서 값을 다시 지정하면 변경됩니다.

작은 프로젝트에서도 사용할 수 있나요?

가능합니다.

하지만 여러 이미지와 복잡한 빌드 환경에서 더 큰 효과를 얻을 수 있습니다.

마무리

Docker Buildx Bake 상속 기능은 반복되는 빌드 설정을 줄이고 Docker 프로젝트를 체계적으로 관리할 수 있도록 도와줍니다.

공통 플랫폼, Cache, Registry 설정 등을 하나의 Target에 작성하고 여러 이미지에서 재사용하면 유지보수가 쉬워지고 빌드 환경을 일관되게 유지할 수 있습니다.

특히 마이크로서비스 구조나 여러 Docker 이미지를 운영하는 환경에서는 Buildx Bake 상속 기능을 활용하면 더욱 효율적인 빌드 자동화 환경을 구축할 수 있습니다.

댓글 남기기