Docker 프로젝트가 커지면 하나의 Docker 이미지만 관리하는 것이 아니라 여러 개의 이미지를 함께 빌드하고 관리해야 하는 경우가 많습니다.
예:
- Backend 이미지
- Frontend 이미지
- Nginx 이미지
- Database 이미지
- 테스트 이미지
- 개발 환경 이미지
기존 방식에서는 각각 Docker Build 명령어를 따로 실행해야 합니다.
예:
docker buildx build -t backend:v1 ./backend
docker buildx build -t frontend:v1 ./frontend
docker buildx build -t nginx:v1 ./nginx
프로젝트 규모가 커질수록 반복되는 빌드 명령어와 옵션 관리가 어려워집니다.
이러한 문제를 해결하기 위해 Docker Buildx는 Bake 기능을 제공합니다.
Docker Buildx Bake는 여러 Docker 이미지의 빌드 설정을 하나의 파일에서 관리하고 자동으로 빌드할 수 있는 기능입니다.
예:
docker buildx bake
설정 파일에 정의된 여러 이미지를 한 번에 빌드할 수 있습니다.
이번 글에서는 Docker Buildx Bake의 개념부터 기본 사용법, 여러 이미지 관리, CI/CD 자동화 활용 방법까지 자세히 알아보겠습니다.
Docker Buildx Bake란 무엇인가?
Docker Buildx Bake는 여러 Docker Build 설정을 파일 형태로 관리하는 빌드 자동화 기능입니다.
기존 방식:
docker buildx build
하나의 이미지 빌드
Docker Buildx Bake:
docker buildx bake
여러 이미지와 빌드 설정 관리
구조:
Bake 설정 파일
↓
Build Target
↓
Docker Image 생성
복잡한 프로젝트의 빌드 과정을 하나의 설정 파일로 관리할 수 있습니다.
Docker Buildx Bake를 사용하는 이유
일반적인 프로젝트 구조:
project/
├── backend/
├── frontend/
└── nginx/
각 이미지마다 별도의 빌드 명령어가 필요합니다.
문제점:
- 반복적인 명령어 작성
- 동일 옵션 재입력 필요
- CI/CD 설정 복잡
- 빌드 환경 관리 어려움
Docker Buildx Bake 사용:
Bake 설정 파일
↓
여러 이미지 자동 빌드
장점:
- 빌드 설정 중앙 관리
- 여러 이미지 동시 빌드
- CI/CD 자동화 편리
- 공통 옵션 재사용 가능
Docker Buildx Bake 기본 사용법
기본 명령어:
docker buildx bake
Docker는 현재 폴더에서 Bake 설정 파일을 찾습니다.
지원 파일:
docker-bake.hcl
docker-bake.json
docker-bake.override.hcl
가장 많이 사용하는 파일은:
docker-bake.hcl
입니다.
Docker Buildx Bake 파일 작성하기
docker-bake.hcl
예제:
group “default” {
targets = [
“app”
]
}
target “app” {
context = “.”
dockerfile = “Dockerfile”
tags = [
“my-app:v1”
]
}
실행:
docker buildx bake
결과:
my-app:v1
이미지가 생성됩니다.
Docker Buildx Bake Target이란?
Target은 빌드할 대상을 의미합니다.
예:
target “backend” {
context = “./backend”
}
target “frontend” {
context = “./frontend”
}
Target:
backend
frontend
각각 독립적인 Docker 이미지를 생성할 수 있습니다.
여러 Docker 이미지 동시에 빌드하기
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 이미지 생성
여러 이미지를 한 번에 빌드할 수 있습니다.
Docker Buildx Bake와 Docker Buildx Build 차이
Docker Buildx Build
명령어:
docker buildx build -t app:v1 .
특징:
- 단일 이미지 빌드
- 명령어 직접 작성
- 간단한 프로젝트에 적합
Docker Buildx Bake
명령어:
docker buildx bake
특징:
- 여러 이미지 관리
- 설정 파일 기반
- 대규모 프로젝트 적합
정리:
Buildx Build
= 하나의 이미지 생성
Buildx Bake
= 여러 빌드 작업 관리
Docker Buildx Bake 실무 활용 예제
Backend + Frontend 프로젝트
프로젝트 구조:
project/
├── backend/
│ └── Dockerfile
├── frontend/
│ └── Dockerfile
└── docker-bake.hcl
docker-bake.hcl:
target “backend” {
context = “./backend”
tags = [
“app/backend:v1”
]
}
target “frontend” {
context = “./frontend”
tags = [
“app/frontend:v1”
]
}
실행:
docker buildx bake
결과:
Backend 이미지 생성
↓
Frontend 이미지 생성
CI/CD에서 Docker Buildx Bake 활용
GitHub Actions 예:
docker buildx bake –push
활용 효과:
- 여러 이미지 자동 빌드
- 설정 파일 기반 관리
- 배포 과정 단순화
Docker Buildx Bake 옵션 활용
특정 Target만 빌드하기
명령어:
docker buildx bake backend
결과:
backend 이미지만 생성됩니다.
여러 Target 지정하기
docker buildx bake backend frontend
두 개의 이미지를 동시에 빌드합니다.
빌드 설정 확인하기
docker buildx bake –print
실제 실행될 Build 설정을 미리 확인할 수 있습니다.
Linux 서버 문제 해결
여러 Docker 이미지를 배포해야 하는 프로젝트가 있었습니다.
기존 방식:
docker buildx build -t backend:v1 ./backend
docker buildx build -t frontend:v1 ./frontend
문제:
- 명령어 반복
- 관리 어려움
- CI/CD 설정 복잡
Docker Buildx Bake 적용:
docker-bake.hcl
target “backend” {
context=”./backend”
}
target “frontend” {
context=”./frontend”
}
실행:
docker buildx bake
결과:
backend 빌드 완료
frontend 빌드 완료
하나의 명령으로 여러 이미지를 관리할 수 있게 되었습니다.
Docker Buildx Bake 사용 시 주의사항
첫 번째는 Bake 파일 관리 규칙을 정해야 합니다.
두 번째는 Target 이름을 명확하게 작성해야 합니다.
세 번째는 이미지 Tag 관리 전략이 필요합니다.
네 번째는 CI/CD 환경에서는 Bake 파일 버전 관리가 중요합니다.
Best Practice
Docker Buildx Bake 활용 방법:
- 여러 이미지 프로젝트에 사용
- docker-bake.hcl 중앙 관리
- Target 이름 규칙 설정
- CI/CD 자동화 연결
- 공통 Build 옵션 재사용
- Registry Push 자동화
자주 묻는 질문
Docker Buildx Bake는 무엇인가요?
여러 Docker 이미지를 설정 파일 기반으로 자동 빌드하는 기능입니다.
Buildx Build와 Bake 차이는 무엇인가요?
Buildx Build는 하나의 이미지를 생성하고, Bake는 여러 빌드 작업을 관리합니다.
어떤 파일을 사용하나요?
일반적으로 docker-bake.hcl 파일을 사용합니다.
작은 프로젝트에서도 사용할 수 있나요?
가능합니다.
하지만 여러 이미지와 복잡한 빌드 환경에서 더욱 큰 효과를 얻을 수 있습니다.
마무리
Docker Buildx Bake는 여러 Docker 이미지를 효율적으로 관리하기 위한 강력한 자동화 기능입니다.
하나의 설정 파일과 명령어만으로 Backend, Frontend, Nginx 등 다양한 이미지를 관리할 수 있으며, CI/CD 환경에서도 빌드 과정을 단순화할 수 있습니다.
특히 마이크로서비스 구조나 여러 컨테이너를 운영하는 환경에서는 Docker Buildx Bake를 활용하면 반복적인 빌드 작업을 줄이고 더욱 안정적인 Docker 이미지 관리 환경을 구축할 수 있습니다.