Docker Buildx Bake Targets 사용법 완벽 가이드! 여러 빌드 대상 관리하기

Docker 프로젝트가 커질수록 하나의 Dockerfile만 사용하는 것이 아니라 여러 가지 Build 목적이 필요해집니다.

예:

  • 개발용 Image
  • 테스트용 Image
  • 운영용 Image
  • Debug Image
  • Release Image
  • CI 전용 Image

하나의 프로젝트에서 여러 Build 설정을 관리해야 하는 경우 Docker Buildx Bake의 Target(대상) 기능을 활용하면 효율적으로 관리할 수 있습니다.

예:

docker-bake.hcl

target "development" {

  tags = [
    "company/app:dev"
  ]

}


target "production" {

  tags = [
    "company/app:latest"
  ]

}

실행:

개발 Build:

docker buildx bake development

운영 Build:

docker buildx bake production

결과:

development Target

↓

dev Image 생성


production Target

↓

production Image 생성

이번 글에서는 Docker Buildx Bake Targets의 개념부터 여러 Build 대상 관리, Target 상속, 환경별 Build 구성, CI/CD 활용까지 자세히 알아보겠습니다.

Docker Buildx Bake Targets란 무엇인가?

Docker Buildx Bake Target은 하나의 Bake 파일 안에서 여러 개의 Build 설정을 정의하는 기능입니다.

쉽게 말하면:

하나의 프로젝트

↓

여러 Build 설정

↓

필요한 Target 선택 실행

구조:

docker-bake.hcl

├── dev Target

├── test Target

└── production Target

필요한 Build만 선택하여 실행할 수 있습니다.

Docker Buildx Bake Targets가 필요한 이유

일반적인 Docker Build:

Dockerfile 하나

↓

항상 동일한 설정

↓

환경 변경 어려움

문제:

  • 개발과 운영 설정 충돌
  • Dockerfile 관리 복잡
  • Build 명령 증가

Target 사용:

하나의 Bake 파일

↓

환경별 Target 관리

↓

필요한 Build 실행

장점:

  • Build 설정 중앙 관리
  • 환경 분리 가능
  • 반복 명령 감소
  • CI/CD 자동화 편리

Docker Buildx Bake Target 기본 설정

docker-bake.hcl:

target "app" {

  context = "."

  dockerfile = "Dockerfile"

  tags = [

    "company/app:v1"

  ]

}

실행:

docker buildx bake app

해당 Target만 Build됩니다.

Docker Buildx Bake 여러 Target 만들기

예:

target "dev" {

  tags = [

    "company/app:dev"

  ]

}


target "prod" {

  tags = [

    "company/app:prod"

  ]

}

실행:

개발:

docker buildx bake dev

운영:

docker buildx bake prod

각각 다른 Image를 생성할 수 있습니다.

Docker Buildx Bake 모든 Target 실행하기

Target 이름 없이 실행하면 전체 Target을 실행할 수 있습니다.

명령어:

docker buildx bake

결과:

dev Build

↓

prod Build

모든 정의된 Target이 실행됩니다.

Docker Buildx Bake Target 상속 사용하기

Target은 공통 설정을 상속할 수 있습니다.

예:

target "base" {

  context = "."

  dockerfile = "Dockerfile"

}


target "dev" {

  inherits = [

    "base"

  ]

  tags = [

    "company/app:dev"

  ]

}


target "prod" {

  inherits = [

    "base"

  ]

  tags = [

    "company/app:prod"

  ]

}

구조:

base Target

↓

공통 설정 제공

↓

dev / prod 사용

중복 설정을 줄일 수 있습니다.

Docker Buildx Bake Target과 환경별 Build 관리

개발 환경:

target "dev" {

  args = {

    ENV = "development"

  }

}

운영 환경:

target "production" {

  args = {

    ENV = "production"

  }

}

하나의 Dockerfile로 여러 환경을 관리할 수 있습니다.

Docker Buildx Bake Target과 Platform 설정

Target마다 다른 Platform을 지정할 수 있습니다.

예:

target "production" {

  platforms = [

    "linux/amd64",

    "linux/arm64"

  ]

}

개발:

target "dev" {

  platforms = [

    "linux/amd64"

  ]

}

환경에 맞게 Build할 수 있습니다.

Docker Buildx Bake Target과 CI/CD 활용

CI/CD에서는 Target별 배포가 가능합니다.

예:

GitHub Actions:

- name: Production Build

  run: |

    docker buildx bake production --push

흐름:

Code Merge

↓

Production Target 실행

↓

Image 생성

↓

Registry Push

Docker Buildx Bake Target 실무 프로젝트 구조

예:

project/

├── Dockerfile

├── docker-bake.hcl

├── app/

└── deployment.yaml

docker-bake.hcl:

target "common" {

  context = "."

  dockerfile = "Dockerfile"

}


target "dev" {

  inherits = [

    "common"

  ]

  tags = [

    "company/app:dev"

  ]

}


target "production" {

  inherits = [

    "common"

  ]

  tags = [

    "company/app:v1.0.0"

  ]

}

실행:

개발:

docker buildx bake dev

운영:

docker buildx bake production --push

Docker Buildx Bake Target 확인 방법

현재 Target 목록 확인:

docker buildx bake --list

출력:

dev

production

설정 확인:

docker buildx bake --print

실제 Build 설정을 확인할 수 있습니다.

Docker Buildx Bake Target 문제 해결

Target 이름 오류

오류:

unknown target

확인:

docker buildx bake --list

Target 이름을 확인합니다.

상속 설정 오류

확인:

inherits = [
 "base"
]

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

여러 Target 실행 시간이 긴 경우

필요한 Target만 실행합니다.

예:

docker buildx bake production

Docker Buildx Bake Target 사용 시 주의사항

첫 번째는 Target 이름 규칙을 통일하는 것이 좋습니다.

두 번째는 공통 설정은 inherits로 관리하는 것이 좋습니다.

세 번째는 개발과 운영 Target을 분리해야 합니다.

네 번째는 CI/CD Pipeline과 Target 구조를 맞추는 것이 좋습니다.

Best Practice

Docker Buildx Bake Target 활용 방법:

  • dev/test/prod 분리
  • 공통 설정 inherits 사용
  • 환경별 Tag 관리
  • CI/CD Target 연결
  • 필요한 Target만 Build
  • 설정 파일 중앙 관리

자주 묻는 질문

Docker Buildx Bake Target은 무엇인가요?

하나의 Bake 파일에서 여러 Build 설정을 관리하는 기능입니다.

여러 Docker Image를 관리할 수 있나요?

가능합니다.

Target별로 다른 Image를 생성할 수 있습니다.

Target 상속이 가능한가요?

가능합니다.

공통 설정을 하나 만들고 여러 Target에서 사용할 수 있습니다.

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

가능합니다.

개발·테스트·운영 배포를 Target별로 자동화할 수 있습니다.

마무리

Docker Buildx Bake Targets는 여러 환경과 여러 목적의 Docker Image를 효율적으로 관리하기 위한 핵심 기능입니다.

하나의 Dockerfile과 Bake 설정에서 개발, 테스트, 운영 환경을 분리할 수 있으며 Target 상속 기능을 활용하면 중복 설정도 줄일 수 있습니다.

특히 CI/CD Pipeline과 Kubernetes 환경에서는 Target 구조를 잘 설계하면 안정적이고 관리하기 쉬운 Docker Build 시스템을 구축할 수 있습니다.

댓글 남기기