Docker Buildx Bake를 사용할 때 가장 중요한 개념 중 하나가 Target입니다.
Target은 어떤 Docker 이미지를 빌드할 것인지 정의하는 빌드 단위입니다.
하나의 프로젝트 안에서:
- Backend 이미지
- Frontend 이미지
- Nginx 이미지
- 테스트 이미지
- 개발용 이미지
- 운영용 이미지
등 여러 빌드 대상을 관리할 때 Target을 사용합니다.
예:
docker-bake.hcl
target "backend" {
context = "./backend"
tags = [
"company/backend:v1"
]
}
실행:
docker buildx bake backend
결과:
backend 이미지만 빌드됩니다.
Docker Buildx Bake Target을 활용하면 여러 Docker 이미지를 하나의 설정 파일에서 체계적으로 관리할 수 있습니다.
이번 글에서는 Docker Buildx Bake Target의 개념부터 Target 생성, 여러 Target 관리, 상속, 그룹 설정, CI/CD 활용 방법까지 자세히 알아보겠습니다.
Docker Buildx Bake Target이란 무엇인가?
Docker Buildx Bake Target은 빌드할 Docker 이미지의 설정을 정의하는 단위입니다.
기본 구조:
Target
↓
Build 설정
↓
Docker Image 생성
예:
target "app" {
context = "."
dockerfile = "Dockerfile"
tags = [
"company/app:v1"
]
}
Target 안에는 다음과 같은 빌드 설정을 포함할 수 있습니다.
- Build Context
- Dockerfile 위치
- Image Tag
- Platform
- Cache
- Output
- Arguments
- Secret
Docker Buildx Bake Target이 필요한 이유
하나의 Docker 이미지만 관리한다면 Target의 필요성을 크게 느끼지 못할 수 있습니다.
하지만 실제 서비스에서는 여러 이미지를 관리합니다.
예:
project/
├── backend/
├── frontend/
├── nginx/
└── worker/
Target을 사용하면:
backend Target
↓
backend Image
frontend Target
↓
frontend Image
각 서비스를 독립적으로 관리할 수 있습니다.
장점:
- 여러 이미지 관리 가능
- 빌드 설정 중앙화
- 반복 명령 제거
- CI/CD 자동화 편리
Docker Buildx Bake Target 기본 작성법
docker-bake.hcl
target "app" {
context = "."
dockerfile = "Dockerfile"
tags = [
"my-app:v1"
]
}
실행:
docker buildx bake app
특정 Target만 실행할 수 있습니다.
Docker Buildx Bake 여러 Target 만들기
여러 서비스를 관리할 수 있습니다.
예:
target "backend" {
context = "./backend"
tags = [
"company/backend:v1"
]
}
target "frontend" {
context = "./frontend"
tags = [
"company/frontend:v1"
]
}
실행:
docker buildx bake backend frontend
결과:
Backend 이미지 빌드
↓
Frontend 이미지 빌드
Docker Buildx Bake Default Target 사용법
기본 실행 Target을 지정할 수 있습니다.
예:
group "default" {
targets = [
"backend",
"frontend"
]
}
실행:
docker buildx bake
결과:
backend와 frontend가 자동 빌드됩니다.
Docker Buildx Bake Target 옵션 설정하기
Target에는 다양한 옵션을 추가할 수 있습니다.
Context 설정
Docker Build 위치 지정:
target "app" {
context = "./app"
}
Dockerfile 지정
target "app" {
dockerfile = "Dockerfile.production"
}
Image Tag 설정
target "app" {
tags = [
"company/app:v1"
]
}
Platform 설정
target "app" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
Docker Buildx Bake Target 상속 활용
공통 설정은 상속으로 관리할 수 있습니다.
예:
target "base" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
target "backend" {
inherits = [
"base"
]
}
target "frontend" {
inherits = [
"base"
]
}
효과:
Backend
↓
공통 Platform 적용
Frontend
↓
공통 Platform 적용
반복 설정을 줄일 수 있습니다.
Docker Buildx Bake Target과 Group 활용
Group은 여러 Target을 묶는 기능입니다.
예:
group "production" {
targets = [
"backend",
"frontend",
"nginx"
]
}
실행:
docker buildx bake production
결과:
Backend 빌드
Frontend 빌드
Nginx 빌드
운영 배포용 이미지 관리에 유용합니다.
Docker Buildx Bake Target과 Override 활용
환경별 Target 설정 변경도 가능합니다.
기본:
docker-bake.hcl
target "app" {
tags = [
"company/app:latest"
]
}
개발 환경:
docker-bake.override.hcl
target "app" {
tags = [
"company/app:dev"
]
}
환경에 따라 같은 Target을 다르게 사용할 수 있습니다.
Docker Buildx Bake Target과 Matrix 활용
Target은 Matrix와 함께 사용할 수 있습니다.
예:
target "app" {
matrix = {
platform = [
"linux/amd64",
"linux/arm64"
]
}
}
결과:
app-amd64
app-arm64
여러 빌드 조합을 자동 생성합니다.
Docker Buildx Bake Target 실무 활용 예제
프로젝트 구조:
project/
├── backend/
│ └── Dockerfile
├── frontend/
│ └── Dockerfile
└── docker-bake.hcl
docker-bake.hcl:
group "default" {
targets = [
"backend",
"frontend"
]
}
target "backend" {
context = "./backend"
tags = [
"company/backend:v1"
]
}
target "frontend" {
context = "./frontend"
tags = [
"company/frontend:v1"
]
}
실행:
docker buildx bake
결과:
Backend 이미지 생성
Frontend 이미지 생성
CI/CD에서 Docker Buildx Bake Target 활용
GitHub Actions:
- name: Build Images
run: |
docker buildx bake production --push
활용:
- 서비스별 이미지 빌드
- 자동 Push
- 배포 자동화
- 빌드 환경 통일
Linux 서버 문제 해결
여러 Docker 서비스를 운영하면서 각각 다른 Build 명령어를 사용하고 있었습니다.
기존:
docker buildx build -t backend:v1 ./backend
docker buildx build -t frontend:v1 ./frontend
문제:
- 명령어 반복
- 옵션 관리 어려움
- CI/CD 설정 복잡
Target 적용:
target "backend" {
context="./backend"
}
target "frontend" {
context="./frontend"
}
실행:
docker buildx bake
결과:
모든 이미지를 하나의 설정 파일에서 관리할 수 있었습니다.
Docker Buildx Bake Target 사용 시 주의사항
첫 번째는 Target 이름을 명확하게 작성해야 합니다.
두 번째는 공통 설정은 상속으로 관리하는 것이 좋습니다.
세 번째는 너무 많은 Target을 하나의 파일에 넣지 않도록 관리해야 합니다.
네 번째는 운영과 개발 Target을 구분하는 것이 좋습니다.
Best Practice
Docker Buildx Bake Target 활용 방법:
- 서비스별 Target 생성
- 공통 설정은 상속 사용
- Group으로 배포 단위 관리
- Tag 규칙 통일
- CI/CD Target 분리
- 환경별 Override 활용
자주 묻는 질문
Docker Buildx Bake Target은 무엇인가요?
Docker 이미지 빌드 대상을 정의하는 설정 단위입니다.
여러 이미지를 관리할 수 있나요?
가능합니다.
Backend, Frontend, Nginx 등 여러 이미지를 각각 Target으로 관리할 수 있습니다.
특정 Target만 빌드할 수 있나요?
가능합니다.
예:
docker buildx bake backend
특정 이미지만 빌드할 수 있습니다.
Target과 Group 차이는 무엇인가요?
Target은 하나의 빌드 대상이고 Group은 여러 Target을 묶는 역할입니다.
마무리
Docker Buildx Bake Target은 여러 Docker 이미지를 체계적으로 관리하기 위한 핵심 기능입니다.
하나의 설정 파일 안에서 서비스별 빌드 환경, Image Tag, Platform, Cache 설정을 분리할 수 있어 대규모 Docker 프로젝트 관리가 쉬워집니다.
특히 Backend, Frontend, Worker처럼 여러 컨테이너를 운영하는 환경에서는 Target과 Group을 활용하면 빌드 자동화와 CI/CD 구축을 더욱 효율적으로 진행할 수 있습니다.