Docker 프로젝트가 커지면 하나의 Dockerfile만 관리하는 것이 아니라 여러 개의 이미지를 동시에 빌드해야 하는 상황이 발생합니다.
예를 들어 다음과 같은 환경이 있을 수 있습니다.
- 개발용 이미지
- 테스트용 이미지
- 운영 배포용 이미지
- 여러 서비스 이미지
- 멀티 플랫폼 이미지
이때 각각의 이미지를 하나씩 docker buildx build 명령으로 실행하면 관리가 복잡해지고 실수가 발생하기 쉽습니다.
이러한 문제를 해결하기 위해 사용하는 기능이 바로 Docker Buildx Bake입니다.
Docker Buildx Bake는 여러 Docker 빌드 작업을 하나의 설정으로 관리하고 자동화할 수 있는 기능입니다.
여러 이미지를 동시에 빌드하거나 동일한 옵션을 반복 적용할 수 있으며, CI/CD 환경에서 효율적인 Docker 이미지 빌드 자동화를 구성할 수 있습니다.
이번 글에서는 Docker Buildx Bake의 개념부터 기본 사용법, 설정 파일 활용, 여러 이미지 빌드, CI/CD 자동화 방법까지 자세히 알아보겠습니다.
Docker Buildx Bake란 무엇인가?
Docker Buildx Bake는 여러 Docker 빌드 작업을 정의하고 실행하는 빌드 자동화 기능입니다.
기존 방식:
docker buildx build -t app .
docker buildx build -t api .
docker buildx build -t worker .
각각 따로 실행해야 합니다.
Bake 사용:
docker buildx bake
하나의 설정 파일에 빌드 정보를 정의하고 여러 이미지를 한 번에 생성할 수 있습니다.
Docker Buildx Bake는 언제 사용하는가?
다음과 같은 환경에서 활용합니다.
- 여러 Docker 이미지 관리
- 대규모 프로젝트
- 모노레포 구조
- CI/CD 자동 빌드
- 멀티 플랫폼 이미지 생성
- 반복적인 빌드 명령 관리
서비스가 많아질수록 Bake 활용 효과가 커집니다.
Docker Buildx Bake 기본 사용법
가장 기본적인 실행 방법입니다.
docker buildx bake
현재 디렉터리의 Bake 설정 파일을 읽어 빌드를 실행합니다.
Docker Buildx Bake 설정 파일
Bake는 설정 파일을 기반으로 동작합니다.
대표적인 파일:
docker-bake.hcl
예:
group "default" {
targets = ["app"]
}
target "app" {
dockerfile = "Dockerfile"
tags = ["my-app:latest"]
}
이 파일에 빌드 설정을 작성합니다.
Docker Buildx Bake Target이란?
Target은 하나의 빌드 작업 단위입니다.
예:
target "frontend" {
dockerfile = "Dockerfile.frontend"
}
target "backend" {
dockerfile = "Dockerfile.backend"
}
두 개의 이미지를 각각 관리할 수 있습니다.
여러 이미지 동시에 빌드하기
여러 Target을 그룹으로 묶을 수 있습니다.
예:
group "default" {
targets = [
"frontend",
"backend"
]
}
실행:
docker buildx bake
결과:
frontend 이미지 빌드
↓
backend 이미지 빌드
여러 이미지를 자동으로 처리합니다.
Docker Buildx Bake 옵션 사용하기
일반 Buildx 옵션도 사용할 수 있습니다.
예:
docker buildx bake \
--push
빌드 후 Registry에 자동 Push합니다.
멀티 플랫폼:
docker buildx bake \
--set *.platform=linux/amd64,linux/arm64
여러 플랫폼 이미지를 생성할 수 있습니다.
Docker Buildx Bake와 Docker Compose 관계
Bake는 Docker Compose와 함께 사용할 수도 있습니다.
Compose 파일:
services:
app:
build:
context: .
변환:
docker buildx bake -f docker-compose.yml
기존 Compose 기반 프로젝트에서도 활용 가능합니다.
Docker Buildx Bake 장점
Docker Buildx Bake를 사용하면 다음 장점이 있습니다.
빌드 명령 단순화
복잡한 옵션을 매번 입력하지 않아도 됩니다.
여러 이미지 관리
하나의 설정 파일에서 여러 서비스를 관리할 수 있습니다.
CI/CD 자동화
빌드 과정을 코드처럼 관리할 수 있습니다.
설정 공유
팀원 모두 동일한 빌드 환경을 사용할 수 있습니다.
Docker Buildx Bake 실무 활용 예제
프로젝트 구조:
project/
├── docker-bake.hcl
├── frontend/
│ └── Dockerfile
└── backend/
└── Dockerfile
docker-bake.hcl:
group "default" {
targets = [
"frontend",
"backend"
]
}
target "frontend" {
context = "./frontend"
tags = [
"company/frontend:latest"
]
}
target "backend" {
context = "./backend"
tags = [
"company/backend:latest"
]
}
실행:
docker buildx bake
한 번의 명령으로 두 개의 이미지를 빌드할 수 있습니다.
Linux 서버 문제 해결
배포 서버에서 여러 서비스를 각각 빌드하는 과정에서 문제가 발생했습니다.
기존 방식:
docker buildx build -t frontend .
docker buildx build -t backend .
docker buildx build -t worker .
서비스가 증가하면서 빌드 명령 관리가 어려워졌습니다.
관리자는 Docker Buildx Bake를 적용했습니다.
docker-bake.hcl 생성:
group "default" {
targets = [
"frontend",
"backend",
"worker"
]
}
이후 실행:
docker buildx bake
모든 서비스 이미지가 자동으로 빌드되었습니다.
Docker Buildx Bake를 활용하면 복잡한 Docker 빌드 작업을 하나의 설정으로 관리할 수 있습니다.
Docker Buildx Bake 사용 시 주의사항
첫 번째는 Bake 설정 파일 관리가 중요합니다.
잘못된 Target 설정은 잘못된 이미지 생성으로 이어질 수 있습니다.
두 번째는 Tag 관리가 필요합니다.
운영 환경에서는 버전 Tag를 사용하는 것이 좋습니다.
세 번째는 Build Cache와 함께 사용하면 더 빠른 빌드가 가능합니다.
네 번째는 CI/CD 환경에서는 Push 옵션과 함께 사용하는 경우가 많습니다.
Best Practice
Docker Buildx Bake를 사용할 때는 다음 방법을 추천합니다.
- 프로젝트별 Bake 파일을 관리합니다.
- Target 이름을 명확하게 지정합니다.
- 운영 이미지는 버전 Tag를 사용합니다.
- CI/CD와 연동합니다.
- Build Cache를 활용합니다.
- 멀티 플랫폼 설정을 명확하게 관리합니다.
자주 묻는 질문
Docker Buildx Bake는 무엇인가요?
여러 Docker 빌드 작업을 설정 파일로 관리하고 자동 실행하는 기능입니다.
Build와 Bake 차이는 무엇인가요?
Build는 하나의 이미지를 빌드하는 명령이고, Bake는 여러 빌드를 자동화하는 기능입니다.
Docker Compose와 함께 사용할 수 있나요?
가능합니다.
Compose 파일의 Build 설정을 Bake에서 활용할 수 있습니다.
Bake 설정 파일 이름은 무엇인가요?
기본 파일은 docker-bake.hcl입니다.
마무리
Docker Buildx Bake는 여러 Docker 이미지 빌드 작업을 자동화하고 관리하기 위한 강력한 기능입니다.
하나의 설정 파일에서 여러 Target과 빌드 옵션을 관리할 수 있어 대규모 프로젝트와 CI/CD 환경에서 매우 유용합니다.
특히 여러 서비스를 운영하거나 반복적인 Docker 빌드 작업이 많은 환경에서는 Buildx Bake를 활용하면 빌드 과정을 단순화하고 안정성을 높일 수 있습니다.