Docker 이미지를 여러 개 운영하는 환경에서는 반복적인 빌드 명령어 관리가 점점 어려워집니다.
예를 들어 하나의 프로젝트에서:
- Backend 이미지
- Frontend 이미지
- Worker 이미지
- 테스트 이미지
등 여러 Docker 이미지를 관리할 수 있습니다.
기존 방식에서는 각각 별도의 명령어를 실행해야 합니다.
예:
docker buildx build -t backend:v1 ./backend
docker buildx build -t frontend:v1 ./frontend
docker buildx build -t worker:v1 ./worker
프로젝트 규모가 커질수록 빌드 명령어 관리가 복잡해집니다.
이때 사용하는 기능이 바로 Docker Buildx Bake입니다.
Docker Buildx Bake는 여러 Docker 빌드 작업을 하나의 설정 파일로 관리하고 자동화할 수 있는 기능입니다.
빌드 대상, 이미지 이름, 플랫폼, Cache, Push 설정 등을 코드 형태로 관리할 수 있어 CI/CD 환경에서 매우 유용합니다.
이번 글에서는 Docker Buildx Bake의 개념부터 기본 사용법, 설정 파일 작성, 멀티 이미지 빌드, CI/CD 자동화 활용 방법까지 자세히 알아보겠습니다.
Docker Buildx Bake란 무엇인가?
Docker Buildx Bake는 여러 Docker 이미지 빌드 작업을 자동화하는 기능입니다.
기존 Docker Build 명령을 설정 파일 기반으로 관리할 수 있습니다.
관리 가능한 항목:
- 이미지 이름
- Dockerfile 위치
- Build Context
- 플랫폼
- Tag
- Cache
- Push 설정
즉, Docker 빌드 작업을 코드처럼 관리할 수 있습니다.
Docker Buildx Bake는 언제 사용하는가?
다음과 같은 환경에서 사용합니다.
- 여러 Docker 이미지 관리
- 대규모 프로젝트
- 마이크로서비스 구조
- CI/CD 자동화
- 멀티 플랫폼 빌드
특히 서비스가 많아질수록 Bake의 장점이 커집니다.
Docker Buildx Bake 기본 사용법
기본 명령어:
docker buildx bake
현재 폴더의 Bake 설정 파일을 읽어 빌드를 실행합니다.
기본 설정 파일:
docker-bake.hcl
입니다.
Docker Buildx Bake 설정 파일 구조
기본 구조:
target "app" {
dockerfile = "Dockerfile"
tags = [
"my-app:latest"
]
}
구성 요소:
- target : 하나의 빌드 작업
- dockerfile : 사용할 Dockerfile
- tags : 생성할 이미지 이름
Docker Buildx Bake Target 설정하기
Target은 하나의 Docker 빌드 작업입니다.
예:
target "backend" {
context = "./backend"
tags = [
"company/backend:v1"
]
}
Backend 이미지를 생성하는 설정입니다.
여러 이미지 한 번에 빌드하기
여러 Target을 정의할 수 있습니다.
예:
target "frontend" {
context = "./frontend"
}
target "backend" {
context = "./backend"
}
실행:
docker buildx bake
두 이미지를 함께 빌드할 수 있습니다.
Docker Buildx Bake Group 사용하기
Group은 여러 Target을 묶는 기능입니다.
예:
group "default" {
targets = [
"frontend",
"backend"
]
}
실행:
docker buildx bake
등록된 모든 Target이 실행됩니다.
Docker Buildx Bake 플랫폼 설정하기
멀티 플랫폼 빌드도 가능합니다.
예:
target "app" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
AMD64와 ARM64 이미지를 동시에 생성합니다.
Docker Buildx Bake 파일 지정하기
기본 파일 외 다른 설정 파일을 사용할 수 있습니다.
예:
docker buildx bake \
-f production.hcl
환경별 빌드 설정을 분리할 수 있습니다.
Docker Buildx Bake 실무 활용 예제
프로젝트 구조:
project/
├── docker-bake.hcl
├── api/
│ └── Dockerfile
├── web/
│ └── Dockerfile
docker-bake.hcl:
group "default" {
targets = [
"api",
"web"
]
}
target "api" {
context = "./api"
tags = [
"company/api:latest"
]
}
target "web" {
context = "./web"
tags = [
"company/web:latest"
]
}
실행:
docker buildx bake
API와 Web 이미지가 자동으로 빌드됩니다.
Docker Buildx Bake와 CI/CD 활용
CI/CD 환경에서는 반복적인 Docker 빌드 작업이 많습니다.
기존:
docker buildx build ...
docker buildx build ...
docker buildx build ...
Bake 사용:
docker buildx bake
하나의 명령으로 전체 빌드를 실행할 수 있습니다.
Linux 서버 문제 해결
CI/CD 서버에서 여러 Docker 이미지를 관리하고 있었습니다.
기존 방식:
backend build
frontend build
worker build
각각 다른 스크립트로 관리되어 유지보수가 어려웠습니다.
관리자는 Bake File을 작성했습니다.
group "default" {
targets = [
"backend",
"frontend",
"worker"
]
}
이후 실행:
docker buildx bake
모든 이미지가 자동으로 빌드되었습니다.
Docker Buildx Bake를 활용하면 복잡한 Docker 빌드 과정을 하나의 설정으로 관리할 수 있습니다.
Docker Buildx Bake 사용 시 주의사항
첫 번째는 Bake 파일을 Git으로 관리하는 것이 좋습니다.
두 번째는 Target 이름을 명확하게 작성해야 합니다.
세 번째는 운영 환경에서는 Tag 규칙을 정하는 것이 중요합니다.
네 번째는 빌드 전에 설정 파일 변경 내용을 검토하는 것이 좋습니다.
Best Practice
Docker Buildx Bake를 사용할 때는 다음 방법을 추천합니다.
- Bake 파일을 버전 관리합니다.
- 서비스별 Target을 구분합니다.
- 환경별 설정 파일을 분리합니다.
- CI/CD와 연동합니다.
- 멀티 플랫폼 옵션을 활용합니다.
- Cache 설정을 함께 관리합니다.
자주 묻는 질문
Docker Buildx Bake는 무엇인가요?
여러 Docker 빌드 작업을 자동화하고 관리하는 기능입니다.
Docker Build와 Bake 차이는 무엇인가요?
Build는 하나의 이미지를 생성하고, Bake는 여러 빌드를 설정 파일로 관리합니다.
Bake 파일 이름은 무엇인가요?
기본 이름은 docker-bake.hcl입니다.
CI/CD에서 사용할 수 있나요?
가능합니다.
자동 빌드 파이프라인 관리에 많이 사용됩니다.
마무리
Docker Buildx Bake는 여러 Docker 이미지 빌드를 효율적으로 관리하기 위한 강력한 자동화 기능입니다.
반복적인 빌드 명령어를 설정 파일로 관리할 수 있으며, 멀티 이미지 프로젝트와 CI/CD 환경에서 특히 큰 효과를 제공합니다.
특히 docker-bake.hcl 파일을 활용하면 빌드 환경을 코드처럼 관리할 수 있어 안정적이고 재사용 가능한 Docker 운영 환경을 구축할 수 있습니다.