Docker Buildx Bake를 사용하다 보면 환경에 따라 변경해야 하는 값이 많아집니다.
예:
- Image Tag
- Version 번호
- Registry 주소
- Platform 설정
- Build 환경
- 개발·운영 설정
고정된 설정:
target "app" {
tags = [
"company/app:v1.0.0"
]
}
문제:
버전 변경
↓
docker-bake.hcl 수정
↓
다시 관리 필요
프로젝트 규모가 커질수록 모든 값을 직접 수정하는 방식은 비효율적입니다.
Docker Buildx Bake에서는 Variables(변수) 기능을 사용하여 반복되는 값을 동적으로 관리할 수 있습니다.
예:
docker-bake.hcl
variable "VERSION" {
default = "1.0.0"
}
target "app" {
tags = [
"company/app:${VERSION}"
]
}
실행:
docker buildx bake app
결과:
company/app:1.0.0
변경:
VERSION=2.0.0 docker buildx bake app
결과:
company/app:2.0.0
이번 글에서는 Docker Buildx Bake Variables의 개념부터 변수 선언 방법, 환경 변수 연동, CI/CD 활용, 동적 Image Version 관리까지 자세히 알아보겠습니다.
Docker Buildx Bake Variables란 무엇인가?
Docker Buildx Bake Variables는 Bake 설정 파일에서 반복되는 값을 변수로 관리하는 기능입니다.
기본 구조:
변수 선언
↓
Target에서 사용
↓
Build 실행 시 값 적용
예:
variable "APP_NAME" {
default = "backend"
}
target "app" {
tags = [
"company/${APP_NAME}:latest"
]
}
결과:
company/backend:latest
같은 설정을 여러 환경에서 재사용할 수 있습니다.
Docker Buildx Bake Variables가 필요한 이유
변수를 사용하지 않는 경우:
target "dev" {
tags = [
"company/app:dev"
]
}
target "production" {
tags = [
"company/app:production"
]
}
문제:
- 반복 설정 증가
- 변경 작업 증가
- 실수 가능성 증가
Variables 사용:
공통 변수
↓
여러 Target 사용
장점:
- 설정 단순화
- 유지보수 편리
- 자동화 환경 적합
- 버전 관리 쉬움
Docker Buildx Bake Variables 기본 사용법
변수 선언:
variable "TAG" {
default = "latest"
}
Target 사용:
target "app" {
tags = [
"company/app:${TAG}"
]
}
실행:
docker buildx bake app
결과:
company/app:latest
Docker Buildx Bake Variables 값 변경하기
기본값:
variable "VERSION" {
default = "1.0"
}
실행:
docker buildx bake app
결과:
VERSION=1.0
변경:
VERSION=2.0 docker buildx bake app
결과:
VERSION=2.0
실행 시 원하는 값을 전달할 수 있습니다.
Docker Buildx Bake Variables와 환경 변수 활용
CI/CD에서는 환경 변수를 많이 사용합니다.
예:
export VERSION=1.5.0
Bake:
variable "VERSION" {
default = "latest"
}
Target:
target "production" {
tags = [
"company/app:${VERSION}"
]
}
실행:
docker buildx bake production
환경 변수 값을 활용할 수 있습니다.
Docker Buildx Bake Variables 여러 개 사용하기
여러 변수를 만들 수 있습니다.
예:
variable "REGISTRY" {
default = "docker.io"
}
variable "IMAGE_NAME" {
default = "app"
}
variable "VERSION" {
default = "latest"
}
target "production" {
tags = [
"${REGISTRY}/${IMAGE_NAME}:${VERSION}"
]
}
결과:
docker.io/app:latest
Image 이름을 동적으로 관리할 수 있습니다.
Docker Buildx Bake Variables와 Target 활용
환경별 변수 설정:
개발:
ENV=dev docker buildx bake app
운영:
ENV=production docker buildx bake app
Bake:
variable "ENV" {
default = "dev"
}
target "app" {
args = {
APP_ENV = "${ENV}"
}
}
결과:
개발 Build
↓
APP_ENV=dev
운영 Build
↓
APP_ENV=production
Docker Buildx Bake Variables와 CI/CD 활용
CI/CD에서는 자동 Version 생성에 많이 사용합니다.
예:
GitHub Actions:
env:
VERSION: ${{ github.sha }}
Bake:
variable "VERSION" {
default = "latest"
}
target "production" {
tags = [
"company/app:${VERSION}"
]
}
결과:
company/app:a82fd91
Commit 기반 Image 관리가 가능합니다.
Docker Buildx Bake Variables와 Multi-platform Build
Platform도 변수로 관리할 수 있습니다.
예:
variable "PLATFORM" {
default = "linux/amd64"
}
target "app" {
platforms = [
"${PLATFORM}"
]
}
환경에 따라 변경 가능합니다.
Docker Buildx Bake Variables 실무 예제
프로젝트:
project/
├── Dockerfile
├── docker-bake.hcl
└── deploy.yaml
docker-bake.hcl:
variable "REGISTRY" {
default = "registry.company.com"
}
variable "VERSION" {
default = "1.0.0"
}
target "production" {
tags = [
"${REGISTRY}/backend:${VERSION}"
]
}
실행:
VERSION=2.0.0 docker buildx bake production
결과:
registry.company.com/backend:2.0.0
Docker Buildx Bake Variables 확인 방법
최종 설정 확인:
docker buildx bake --print production
출력:
적용된 변수 값 확인
↓
최종 Build 설정 확인
Target 목록 확인:
docker buildx bake --list
Docker Buildx Bake Variables 문제 해결
변수가 적용되지 않는 경우
확인:
variable "VERSION" {
default = "1.0"
}
사용:
${VERSION}
이름이 동일한지 확인합니다.
기본값 오류
확인:
docker buildx bake --print
최종 값을 확인합니다.
CI 환경에서 값 전달 실패
확인:
- 환경 변수 등록
- Workflow 설정
- Secret 설정
Docker Buildx Bake Variables 사용 시 주의사항
첫 번째는 변수 이름 규칙을 통일하는 것이 좋습니다.
두 번째는 민감 정보는 Variable보다 Secret 기능을 사용하는 것이 안전합니다.
세 번째는 기본값을 지정하면 관리가 편리합니다.
네 번째는 CI/CD 환경에서는 변수 전달 방식을 명확히 해야 합니다.
Best Practice
Docker Buildx Bake Variables 활용 방법:
- Image Version 관리
- Registry 주소 관리
- 환경별 설정 관리
- CI/CD 변수 연결
- 반복 설정 제거
- Build 자동화
자주 묻는 질문
Docker Buildx Bake Variables는 무엇인가요?
Bake 설정에서 값을 변수로 관리하는 기능입니다.
환경 변수와 함께 사용할 수 있나요?
가능합니다.
CI/CD 환경에서 많이 활용됩니다.
Version 관리에 사용할 수 있나요?
가능합니다.
Commit ID, Release Version 등을 Tag에 적용할 수 있습니다.
Secret도 Variable로 관리하면 되나요?
권장하지 않습니다.
비밀번호와 Token은 Secret 기능을 사용하는 것이 안전합니다.
마무리
Docker Buildx Bake Variables는 복잡한 Build 설정을 간단하게 관리하기 위한 중요한 기능입니다.
Image Version, Registry 주소, 환경 설정 등을 변수화하면 하나의 Bake 파일로 다양한 환경을 효율적으로 관리할 수 있습니다.
특히 CI/CD 환경에서는 자동 Version 생성과 Build 설정 변경에 Variables를 활용하면 더욱 안정적인 Docker Image 관리 시스템을 구축할 수 있습니다.