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 시스템을 구축할 수 있습니다.