Docker Buildx Bake는 일반적으로 HCL 형식을 많이 사용하지만, YAML 형식으로도 빌드 설정을 작성할 수 있습니다.
YAML은 사람이 읽기 쉬운 구조를 가지고 있어 설정 파일 관리에 익숙한 개발자나 CI/CD 환경에서 활용하기 좋습니다.
예:
docker-bake.yaml
target:
app:
context: .
dockerfile: Dockerfile
tags:
- company/app:v1
실행:
docker buildx bake -f docker-bake.yaml
YAML 파일에 정의된 설정을 기반으로 Docker 이미지를 빌드할 수 있습니다.
이번 글에서는 Docker Buildx Bake YAML의 개념부터 기본 구조, Target 작성 방법, 여러 이미지 관리, CI/CD 활용 방법까지 자세히 알아보겠습니다.
Docker Buildx Bake YAML이란 무엇인가?
Docker Buildx Bake YAML은 Docker 이미지 빌드 설정을 YAML 형식으로 작성하는 방법입니다.
기본 Bake 설정 파일:
docker-bake.hcl
docker-bake.json
docker-bake.yaml
YAML 구조:
YAML 설정 파일
↓
Target 정의
↓
Build 옵션 적용
↓
Docker Image 생성
HCL과 동일한 Docker Buildx Bake 기능을 다른 문법으로 작성할 수 있습니다.
Docker Buildx Bake YAML을 사용하는 이유
Docker Buildx Bake에서 HCL 형식이 가장 많이 사용되지만 YAML 방식도 장점이 있습니다.
YAML 장점:
- 구조가 간단함
- 사람이 읽기 쉬움
- CI/CD 설정과 유사함
- 설정 파일 관리 편리
특히 다음 환경에서 유용합니다.
- GitHub Actions
- GitLab CI
- Kubernetes 기반 환경
- 자동 생성 설정
Docker Buildx Bake YAML 기본 구조
기본 구조:
target:
이미지이름:
빌드설정
예:
target:
app:
context: .
dockerfile: Dockerfile
구성:
target
= 빌드 대상
app
= Target 이름
context
= Docker Build 위치
dockerfile
= 사용할 Dockerfile
Docker Buildx Bake YAML Target 작성 방법
docker-bake.yaml
target:
app:
context: .
dockerfile: Dockerfile
tags:
- company/app:v1
실행:
docker buildx bake -f docker-bake.yaml app
결과:
company/app:v1
이미지가 생성됩니다.
Docker Buildx Bake YAML 여러 Target 관리하기
여러 서비스를 하나의 YAML 파일에서 관리할 수 있습니다.
예:
target:
backend:
context: ./backend
tags:
- company/backend:v1
frontend:
context: ./frontend
tags:
- company/frontend:v1
실행:
docker buildx bake -f docker-bake.yaml backend frontend
결과:
Backend 이미지 생성
↓
Frontend 이미지 생성
여러 Docker 이미지를 하나의 파일에서 관리할 수 있습니다.
Docker Buildx Bake YAML Group 설정하기
Group은 여러 Target을 묶어서 한번에 실행하는 기능입니다.
예:
group:
default:
targets:
- backend
- frontend
실행:
docker buildx bake -f docker-bake.yaml
결과:
backend와 frontend가 함께 빌드됩니다.
Docker Buildx Bake YAML Platform 설정
YAML에서도 멀티 플랫폼 빌드를 설정할 수 있습니다.
예:
target:
app:
platforms:
- linux/amd64
- linux/arm64
결과:
linux/amd64 이미지
linux/arm64 이미지
Intel 서버와 ARM 서버 모두 지원할 수 있습니다.
Docker Buildx Bake YAML Cache 설정
빌드 속도를 높이기 위해 Cache 설정을 추가할 수 있습니다.
예:
target:
app:
cache-from:
- type=registry,ref=company/cache
cache-to:
- type=registry,ref=company/cache
효과:
- 기존 Layer 재사용
- 빌드 시간 감소
- CI/CD 속도 향상
Docker Buildx Bake YAML Output 설정
빌드 결과 저장 위치도 지정할 수 있습니다.
예:
target:
app:
output:
- type=docker
또는:
target:
app:
output:
- type=local,dest=./result
활용:
- 이미지 저장
- 파일 추출
- Artifact 생성
Docker Buildx Bake YAML 변수 관리
YAML은 HCL처럼 Variable 블록을 직접 사용하는 방식은 아니지만 환경 변수와 함께 활용할 수 있습니다.
예:
target:
app:
tags:
- company/app:v1
CI/CD 환경에서는 빌드 전에 YAML 파일을 생성하거나 값을 변경하는 방식으로 활용합니다.
Docker Buildx Bake YAML과 HCL 비교
HCL
특징:
- Docker 공식 예제에서 많이 사용
- 변수 지원
- 상속 지원
- 복잡한 설정에 적합
예:
target "app" {
tags = [
"company/app:v1"
]
}
YAML
특징:
- 읽기 쉬움
- 구조 단순
- CI/CD 친화적
- 자동화 환경 적합
예:
target:
app:
tags:
- company/app:v1
정리:
HCL
= 복잡한 Docker Build 관리
YAML
= 간단하고 읽기 쉬운 설정 관리
Docker Buildx Bake YAML 실무 활용 예제
프로젝트 구조:
project/
├── backend/
├── frontend/
└── docker-bake.yaml
docker-bake.yaml:
group:
default:
targets:
- backend
- frontend
target:
backend:
context: ./backend
tags:
- company/backend:v1
frontend:
context: ./frontend
tags:
- company/frontend:v1
실행:
docker buildx bake -f docker-bake.yaml
결과:
Backend 이미지 생성
Frontend 이미지 생성
CI/CD에서 Docker Buildx Bake YAML 활용
GitHub Actions 예:
- name: Build Docker Images
run: |
docker buildx bake \
-f docker-bake.yaml \
--push
활용:
- 자동 이미지 빌드
- Registry Push
- 배포 자동화
- 동일한 Build 환경 유지
Docker Buildx Bake YAML과 Compose 활용
기존 Docker Compose 환경에서도 YAML 기반 설정을 활용할 수 있습니다.
예:
docker-compose.yml
↓
Buildx Bake 변환
↓
docker-bake.yaml 관리
여러 서비스 프로젝트에서 유용합니다.
Linux 서버 문제 해결
여러 Docker 서비스를 운영하면서 Build 설정을 관리해야 했습니다.
기존:
각 서비스마다 별도 명령 실행
docker buildx build backend
docker buildx build frontend
문제:
- 반복 명령 증가
- 옵션 관리 어려움
- 자동화 복잡
YAML 적용:
docker-bake.yaml
target:
backend:
context: ./backend
frontend:
context: ./frontend
실행:
docker buildx bake -f docker-bake.yaml
결과:
하나의 YAML 파일로 여러 Docker 이미지를 관리할 수 있었습니다.
Docker Buildx Bake YAML 사용 시 주의사항
첫 번째는 YAML 들여쓰기 오류를 주의해야 합니다.
두 번째는 큰 프로젝트에서는 파일 구조를 체계적으로 관리해야 합니다.
세 번째는 복잡한 상속 구조에서는 HCL이 더 적합할 수 있습니다.
네 번째는 CI/CD 환경에서는 파일 버전 관리를 해야 합니다.
Best Practice
Docker Buildx Bake YAML 활용 방법:
- 간단한 프로젝트에서 사용
- CI/CD 설정과 함께 관리
- 서비스별 Target 분리
- Platform 명확하게 지정
- Cache 설정 적용
- Registry Push 자동화
자주 묻는 질문
Docker Buildx Bake YAML은 무엇인가요?
Docker Buildx Bake 설정을 YAML 형식으로 작성하는 방법입니다.
HCL과 YAML 중 어떤 것을 사용하는 것이 좋나요?
간단한 프로젝트는 YAML이 편리하고, 복잡한 프로젝트는 HCL이 적합합니다.
YAML에서도 여러 이미지를 관리할 수 있나요?
가능합니다.
Target을 여러 개 만들어 Backend, Frontend 등 여러 이미지를 관리할 수 있습니다.
CI/CD에서 사용할 수 있나요?
가능합니다.
GitHub Actions 같은 자동화 환경과 잘 어울립니다.
마무리
Docker Buildx Bake YAML은 Docker 이미지 빌드 설정을 간단하고 읽기 쉬운 형태로 관리할 수 있는 방법입니다.
HCL보다 문법이 단순하고 구조가 명확하기 때문에 설정 파일을 쉽게 관리할 수 있으며, CI/CD 환경에서도 활용하기 좋습니다.
특히 여러 Docker 서비스를 운영하는 프로젝트에서는 YAML 기반 Bake 설정을 활용하면 빌드 과정을 자동화하고 효율적인 이미지 관리 환경을 구축할 수 있습니다.