Docker Buildx Bake를 사용하면 여러 개의 Build 설정을 하나의 파일에서 관리할 수 있습니다.
하지만 프로젝트 규모가 커지면 다양한 Build 대상(Target)이 필요해집니다.
예:
- 개발용 Image Build
- 테스트용 Image Build
- 운영용 Image Build
- 배포용 Image Build
- CI 전용 Build
하나의 Dockerfile을 사용하더라도 환경마다 다른 Build 결과가 필요할 수 있습니다.
예:
개발 환경
↓
app:dev
테스트 환경
↓
app:test
운영 환경
↓
app:production
Docker Buildx Bake에서는 Target 기능을 사용하여 각각의 Build 대상을 관리할 수 있습니다.
예:
docker-bake.hcl
target "development" {
tags = [
"company/app:dev"
]
}
target "production" {
tags = [
"company/app:latest"
]
}
실행:
docker buildx bake development
또는
docker buildx bake production
결과:
development Target 실행
↓
dev Image 생성
production Target 실행
↓
production Image 생성
이번 글에서는 Docker Buildx Bake Target의 개념부터 Target 생성, 여러 Target 관리, Target 상속, CI/CD 활용, 실무 프로젝트 구성 방법까지 자세히 알아보겠습니다.
Docker Buildx Bake Target이란 무엇인가?
Docker Buildx Bake Target은 Build 작업의 하나의 단위를 의미합니다.
쉽게 설명하면:
Target
↓
하나의 Build 설정 그룹
입니다.
Target 안에는 다음 설정을 포함할 수 있습니다.
- context
- dockerfile
- tags
- platforms
- args
- cache
- output
- secrets
예:
target "app" {
context = "."
dockerfile = "Dockerfile"
tags = [
"company/app:v1"
]
}
하나의 Target이 하나의 Image Build 설정을 담당합니다.
Docker Buildx Bake Target이 필요한 이유
Target 없이 관리하면:
docker buildx build .
명령어가 계속 늘어납니다.
예:
개발 Build 명령어
운영 Build 명령어
테스트 Build 명령어
배포 Build 명령어
문제:
- 명령어 관리 어려움
- 설정 공유 어려움
- 자동화 복잡
Target 사용:
docker-bake.hcl
↓
여러 Build 설정 저장
↓
필요한 Target 실행
장점:
- 환경별 Build 관리
- 설정 재사용
- CI/CD 연결 쉬움
- 유지보수 편리
Docker Buildx Bake Target 기본 사용법
docker-bake.hcl:
target "app" {
context = "."
dockerfile = "Dockerfile"
}
실행:
docker buildx bake app
동작:
app Target 선택
↓
Dockerfile 확인
↓
Build 실행
Docker Buildx Bake 여러 Target 만들기
여러 환경을 Target으로 분리할 수 있습니다.
예:
target "dev" {
tags = [
"company/app:dev"
]
}
target "test" {
tags = [
"company/app:test"
]
}
target "production" {
tags = [
"company/app:prod"
]
}
실행:
개발:
docker buildx bake dev
테스트:
docker buildx bake test
운영:
docker buildx bake production
환경별 Image를 관리할 수 있습니다.
Docker Buildx Bake Target과 Inheritance 활용
Target은 상속 기능과 함께 사용할 수 있습니다.
기본 Target:
target "base" {
context = "."
dockerfile = "Dockerfile"
}
운영 Target:
target "production" {
inherits = [
"base"
]
tags = [
"company/app:latest"
]
}
구조:
base
↓
production
공통 설정을 재사용할 수 있습니다.
Docker Buildx Bake Target Args 설정
Target마다 다른 Build 값을 전달할 수 있습니다.
예:
target "dev" {
args = {
ENV = "development"
}
}
target "production" {
args = {
ENV = "production"
}
}
결과:
dev
↓
ENV=development
production
↓
ENV=production
환경별 설정 관리가 가능합니다.
Docker Buildx Bake Target Platform 설정
Target별 Platform을 다르게 지정할 수 있습니다.
예:
개발:
target "dev" {
platforms = [
"linux/amd64"
]
}
운영:
target "production" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
운영 환경에서 Multi-platform Image를 생성할 수 있습니다.
Docker Buildx Bake Target Group 사용법
여러 Target을 한번에 실행할 수도 있습니다.
예:
group "default" {
targets = [
"frontend",
"backend"
]
}
실행:
docker buildx bake
결과:
frontend Build
↓
backend Build
↓
두 개 모두 실행
여러 서비스를 관리하는 프로젝트에서 유용합니다.
Docker Buildx Bake Target CI/CD 활용
CI/CD에서는 환경별 Target 실행이 일반적입니다.
예:
GitHub Actions:
- name: Build Production
run: |
docker buildx bake production --push
구조:
Git Push
↓
CI 실행
↓
production Target 선택
↓
Image Build
↓
Registry Push
Docker Buildx Bake Target 실무 프로젝트 예제
프로젝트:
project/
├── Dockerfile
├── docker-bake.hcl
└── deploy/
docker-bake.hcl:
target "base" {
context = "."
dockerfile = "Dockerfile"
}
target "dev" {
inherits = [
"base"
]
tags = [
"company/app:dev"
]
args = {
ENV = "development"
}
}
target "production" {
inherits = [
"base"
]
tags = [
"company/app:v1"
]
platforms = [
"linux/amd64",
"linux/arm64"
]
args = {
ENV = "production"
}
}
실행:
개발:
docker buildx bake dev
운영:
docker buildx bake production --push
Docker Buildx Bake Target 확인 방법
Target 목록 확인:
docker buildx bake --list
출력:
dev
test
production
최종 설정 확인:
docker buildx bake production --print
확인 가능:
- Tag
- Platform
- Args
- Cache
- Output
Docker Buildx Bake Target 문제 해결
Target을 찾지 못하는 경우
오류:
unknown target
확인:
docker buildx bake --list
Target 이름을 확인합니다.
Target 설정이 적용되지 않는 경우
확인:
docker buildx bake target-name --print
최종 설정을 확인합니다.
여러 Target 실행 오류
확인:
group "default" {
targets = [
"app"
]
}
Target 이름을 확인합니다.
Docker Buildx Bake Target 사용 시 주의사항
첫 번째는 Target 이름 규칙을 정하는 것이 좋습니다.
두 번째는 너무 많은 Target을 만들면 관리가 어려워질 수 있습니다.
세 번째는 공통 설정은 Base Target으로 분리하는 것이 좋습니다.
네 번째는 Production Target 실행 전 최종 설정 확인이 필요합니다.
Best Practice
Docker Buildx Bake Target 활용 방법:
- 환경별 Target 분리
- Base Target 생성
- Inheritance 활용
- Group으로 묶기
- CI/CD 연결
- 최종 설정 검증
자주 묻는 질문
Docker Buildx Bake Target은 무엇인가요?
하나의 Build 작업 설정 단위입니다.
여러 Target을 동시에 실행할 수 있나요?
가능합니다.
Group 기능을 사용하면 여러 Target을 한번에 실행할 수 있습니다.
개발과 운영 환경을 분리할 수 있나요?
가능합니다.
각 환경을 별도의 Target으로 관리하면 됩니다.
Target과 Dockerfile은 같은 개념인가요?
아닙니다.
Dockerfile은 Image 생성 방법이고 Target은 Build 설정 관리 단위입니다.
마무리
Docker Buildx Bake Target은 여러 Docker Build 환경을 체계적으로 관리하기 위한 핵심 기능입니다.
개발, 테스트, 운영 환경을 각각 Target으로 분리하면 하나의 Dockerfile을 다양한 환경에서 효율적으로 사용할 수 있습니다.
특히 CI/CD Pipeline, Multi-platform Build, 여러 서비스가 있는 프로젝트에서는 Target 구조를 잘 설계하는 것이 안정적인 Docker 운영 환경을 만드는 중요한 요소입니다.