Docker Buildx Bake Groups 사용법 완벽 가이드! 여러 Target 한번에 실행하기

Docker Buildx Bake를 사용하면 여러 개의 Target을 만들어 다양한 Build 환경을 관리할 수 있습니다.

프로젝트 규모가 커지면 하나의 Image만 Build하는 것이 아니라 여러 서비스를 동시에 Build해야 하는 경우가 많습니다.

예:

  • Frontend Image Build
  • Backend Image Build
  • Worker Image Build
  • Database Migration Image Build
  • 테스트용 Image Build

Target을 각각 실행하는 경우:

docker buildx bake frontend

docker buildx bake backend

docker buildx bake worker

문제:

  • 실행 명령 증가
  • CI/CD 설정 복잡
  • 여러 서비스 관리 어려움

Docker Buildx Bake에서는 Group 기능을 사용하여 여러 Target을 하나로 묶고 한번에 실행할 수 있습니다.

예:

docker-bake.hcl

group "default" {

  targets = [

    "frontend",

    "backend",

    "worker"

  ]

}

실행:

docker buildx bake

결과:

frontend Build 실행

↓

backend Build 실행

↓

worker Build 실행

여러 Build 작업을 하나의 명령으로 관리할 수 있습니다.

이번 글에서는 Docker Buildx Bake Groups의 개념부터 Group 생성 방법, 여러 Target 실행, CI/CD 활용, Monorepo 프로젝트 구성 방법까지 자세히 알아보겠습니다.

Docker Buildx Bake Groups란 무엇인가?

Docker Buildx Bake Groups는 여러 Target을 묶어서 한번에 실행하는 기능입니다.

기본 구조:

Group

↓

여러 Target

↓

동시에 Build 실행

예:

default

├── frontend

├── backend

└── worker

하나의 명령으로 여러 Build 작업을 실행할 수 있습니다.

Docker Buildx Bake Groups가 필요한 이유

Group 없이 관리하면:

docker buildx bake frontend

docker buildx bake backend

docker buildx bake worker

반복 실행해야 합니다.

문제:

  • 명령어 증가
  • 자동화 어려움
  • Build 순서 관리 필요

Group 사용:

전체 서비스

↓

하나의 Group 실행

↓

모든 Target Build

장점:

  • 여러 Image 동시 관리
  • CI/CD 단순화
  • Monorepo 관리 편리
  • 배포 자동화 쉬움

Docker Buildx Bake Groups 기본 사용법

docker-bake.hcl:

target "frontend" {

  context = "./frontend"

}


target "backend" {

  context = "./backend"

}


group "default" {

  targets = [

    "frontend",

    "backend"

  ]

}

실행:

docker buildx bake

결과:

frontend Image Build

↓

backend Image Build

Docker Buildx Bake Groups 이름 지정하기

기본 Group:

group "default" {

  targets = [

    "app"

  ]

}

docker buildx bake 실행 시 자동 사용됩니다.

사용자 지정 Group:

group "production" {

  targets = [

    "frontend",

    "backend"

  ]

}

실행:

docker buildx bake production

특정 Group만 실행할 수 있습니다.

Docker Buildx Bake Groups 여러 개 만들기

환경별 Group을 만들 수 있습니다.

예:

group "development" {

  targets = [

    "frontend-dev",

    "backend-dev"

  ]

}


group "production" {

  targets = [

    "frontend-prod",

    "backend-prod"

  ]

}

개발:

docker buildx bake development

운영:

docker buildx bake production

환경별 Build 관리가 가능합니다.

Docker Buildx Bake Groups와 Target 상속 활용

Group은 Target Inheritance와 함께 사용할 수 있습니다.

공통 Target:

target "base" {

  dockerfile = "Dockerfile"

}

서비스 Target:

target "backend" {

  inherits = [

    "base"

  ]

}

Group:

group "services" {

  targets = [

    "frontend",

    "backend"

  ]

}

구조:

base

↓

서비스 Target

↓

Group 실행

Docker Buildx Bake Groups와 Multi-service 프로젝트

대규모 프로젝트에서는 여러 Container를 운영합니다.

예:

project/

├── frontend/

├── backend/

├── api/

└── worker/

Bake:

group "all" {

  targets = [

    "frontend",

    "backend",

    "api",

    "worker"

  ]

}

실행:

docker buildx bake all

전체 서비스를 한번에 Build할 수 있습니다.

Docker Buildx Bake Groups CI/CD 활용

CI/CD Pipeline에서는 Group 기능이 매우 유용합니다.

GitHub Actions:

- name: Build All Services

  run: |

    docker buildx bake production --push

구조:

Code Push

↓

CI 실행

↓

Production Group 선택

↓

여러 Image Build

↓

Registry Push

여러 서비스를 자동 배포할 수 있습니다.

Docker Buildx Bake Groups와 Registry Push

Group 내부 Target마다 다른 Image를 설정할 수 있습니다.

예:

target "frontend" {

  tags = [

    "company/frontend:v1"

  ]

}


target "backend" {

  tags = [

    "company/backend:v1"

  ]

}


group "production" {

  targets = [

    "frontend",

    "backend"

  ]

}

실행:

docker buildx bake production --push

결과:

company/frontend:v1

+

company/backend:v1

동시에 Push됩니다.

Docker Buildx Bake Groups 실무 예제

프로젝트:

application/

├── frontend/

├── backend/

├── worker/

├── Dockerfile

└── docker-bake.hcl

docker-bake.hcl:

target "frontend" {

  context = "./frontend"

  tags = [

    "registry.company.com/frontend:v1"

  ]

}


target "backend" {

  context = "./backend"

  tags = [

    "registry.company.com/backend:v1"

  ]

}


target "worker" {

  context = "./worker"

  tags = [

    "registry.company.com/worker:v1"

  ]

}


group "production" {

  targets = [

    "frontend",

    "backend",

    "worker"

  ]

}

실행:

docker buildx bake production --push

결과:

Frontend Image Build

↓

Backend Image Build

↓

Worker Image Build

↓

Registry Push

Docker Buildx Bake Groups 확인 방법

Group 목록 확인:

docker buildx bake --list

최종 설정 확인:

docker buildx bake production --print

확인 가능:

  • 포함 Target
  • Image Tag
  • Platform
  • Cache 설정

Docker Buildx Bake Groups 문제 해결

Group 실행 오류

오류:

unknown group

확인:

docker buildx bake --list

Group 이름을 확인합니다.

Target 일부 실패

확인:

docker buildx bake production --print

포함된 Target 설정을 확인합니다.

Build 시간이 오래 걸리는 경우

해결:

  • Cache 적용
  • 필요 Target만 실행
  • Parallel Build 활용

Docker Buildx Bake Groups 사용 시 주의사항

첫 번째는 Group에 너무 많은 Target을 넣으면 Build 시간이 증가할 수 있습니다.

두 번째는 서비스별 Image Tag 규칙을 통일하는 것이 좋습니다.

세 번째는 Production Group과 Development Group을 분리하는 것이 좋습니다.

네 번째는 실패한 Target을 쉽게 확인할 수 있도록 로그 관리를 해야 합니다.

Best Practice

Docker Buildx Bake Groups 활용 방법:

  • 서비스별 Target 구성
  • 환경별 Group 분리
  • CI/CD 자동화 연결
  • Registry Push 통합
  • Monorepo 관리
  • 공통 설정 재사용

자주 묻는 질문

Docker Buildx Bake Groups는 무엇인가요?

여러 Target을 묶어서 한번에 실행하는 기능입니다.

여러 Docker Image를 동시에 Build할 수 있나요?

가능합니다.

Group에 여러 Target을 추가하면 됩니다.

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

가능합니다.

Frontend, Backend, Worker 같은 여러 서비스를 관리하는 데 적합합니다.

Group과 Target의 차이는 무엇인가요?

Target은 하나의 Build 작업 단위이고, Group은 여러 Target을 묶은 실행 단위입니다.

마무리

Docker Buildx Bake Groups는 여러 Docker Image와 서비스를 효율적으로 관리하기 위한 중요한 기능입니다.

여러 Target을 Group으로 묶으면 하나의 명령으로 전체 서비스를 Build할 수 있으며 CI/CD Pipeline 구성도 더욱 간단해집니다.

특히 Microservice 환경이나 Monorepo 프로젝트에서는 Group 기능을 활용하면 복잡한 Docker Build 과정을 체계적으로 관리할 수 있습니다.

댓글 남기기