Docker 프로젝트가 커질수록 여러 이미지의 빌드 설정이 비슷해지는 경우가 많습니다.
예:
- 동일한 Dockerfile 사용
- 동일한 플랫폼 설정
- 동일한 Cache 설정
- 동일한 Registry Push 설정
- 동일한 Build Arguments 사용
하지만 각각의 Target에 같은 설정을 반복해서 작성하면 관리가 어려워집니다.
예:
target "backend" {
platforms = [
"linux/amd64",
"linux/arm64"
]
cache-from = [
"type=registry,ref=company/cache"
]
cache-to = [
"type=registry,ref=company/cache"
]
}
target "frontend" {
platforms = [
"linux/amd64",
"linux/arm64"
]
cache-from = [
"type=registry,ref=company/cache"
]
cache-to = [
"type=registry,ref=company/cache"
]
}
같은 설정이 반복됩니다.
이러한 문제를 해결하기 위해 Docker Buildx Bake는 상속(Inheritance) 기능을 제공합니다.
상속을 사용하면 공통 설정을 하나의 Target에 작성하고 다른 Target에서 재사용할 수 있습니다.
예:
target "common" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
target "backend" {
inherits = [
"common"
]
}
backend Target은 common 설정을 그대로 사용할 수 있습니다.
이번 글에서는 Docker Buildx Bake 상속의 개념부터 기본 사용법, 공통 설정 관리, 여러 이미지 빌드 최적화, CI/CD 활용 방법까지 자세히 알아보겠습니다.
Docker Buildx Bake 상속이란 무엇인가?
Docker Buildx Bake 상속은 하나의 Target에 정의된 빌드 설정을 다른 Target에서 가져와 사용하는 기능입니다.
기본 구조:
공통 Target
↓
상속 Target
↓
Docker Image 생성
예:
target "base" {
platforms = [
"linux/amd64"
]
}
target "app" {
inherits = [
"base"
]
}
app Target은 base Target의 설정을 사용할 수 있습니다.
Docker Buildx Bake 상속이 필요한 이유
상속을 사용하지 않는 경우:
target "backend" {
platforms = [
"linux/amd64"
]
}
target "frontend" {
platforms = [
"linux/amd64"
]
}
문제:
- 동일 설정 반복
- 수정할 곳 증가
- 설정 오류 가능성 증가
상속 사용:
target "base" {
platforms = [
"linux/amd64"
]
}
target "backend" {
inherits = [
"base"
]
}
target "frontend" {
inherits = [
"base"
]
}
장점:
- 공통 설정 중앙 관리
- 유지보수 편리
- 빌드 환경 통일
Docker Buildx Bake 상속 기본 사용법
docker-bake.hcl
target "common" {
platforms = [
"linux/amd64",
"linux/arm64"
]
pull = true
}
target "app" {
inherits = [
"common"
]
context = "."
}
실행:
docker buildx bake app
동작:
common 설정 적용
↓
app 빌드 실행
Docker Buildx Bake 여러 Target 상속하기
하나의 공통 Target을 여러 이미지에서 사용할 수 있습니다.
예:
target "base" {
platforms = [
"linux/amd64",
"linux/arm64"
]
pull = true
}
target "backend" {
inherits = [
"base"
]
context = "./backend"
}
target "frontend" {
inherits = [
"base"
]
context = "./frontend"
}
결과:
backend
↓
base 설정 적용
frontend
↓
base 설정 적용
공통 설정을 재사용할 수 있습니다.
Docker Buildx Bake 상속과 설정 덮어쓰기
상속받은 설정은 변경할 수 있습니다.
예:
공통 설정:
target "base" {
platforms = [
"linux/amd64"
]
}
변경:
target "backend" {
inherits = [
"base"
]
platforms = [
"linux/arm64"
]
}
결과:
backend는 ARM64 플랫폼으로 빌드됩니다.
Docker Buildx Bake 상속 실무 활용 예제
공통 운영 설정 관리
docker-bake.hcl
target "production-base" {
platforms = [
"linux/amd64",
"linux/arm64"
]
tags = [
"company/app:latest"
]
}
target "backend" {
inherits = [
"production-base"
]
context = "./backend"
}
target "frontend" {
inherits = [
"production-base"
]
context = "./frontend"
}
효과:
- 동일 플랫폼 적용
- 동일 배포 설정 적용
- 관리 파일 감소
CI/CD에서 Docker Buildx Bake 상속 활용
CI 환경에서는 공통 배포 설정을 만들어 관리할 수 있습니다.
예:
target "ci-base" {
pull = true
cache-from = [
"type=gha"
]
cache-to = [
"type=gha"
]
}
target "backend" {
inherits = [
"ci-base"
]
}
효과:
- 모든 이미지 Cache 적용
- 동일한 CI 설정 유지
- 빌드 속도 향상
Docker Buildx Bake 상속과 Group 함께 사용하기
예:
group "default" {
targets = [
"backend",
"frontend"
]
}
target "base" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
target "backend" {
inherits = [
"base"
]
}
target "frontend" {
inherits = [
"base"
]
}
실행:
docker buildx bake
두 이미지 모두 공통 설정을 적용하여 빌드합니다.
Linux 서버 문제 해결
여러 Docker 이미지를 운영하면서 플랫폼과 Cache 설정을 각각 관리하고 있었습니다.
기존:
target "backend" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
target "frontend" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
문제:
- 설정 중복
- 수정 시 여러 곳 변경 필요
- 실수 발생 가능
상속 적용:
target "base" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
target "backend" {
inherits = [
"base"
]
}
target "frontend" {
inherits = [
"base"
]
}
결과:
공통 설정은 한 곳에서 관리하고 모든 이미지에 적용할 수 있었습니다.
Docker Buildx Bake 상속 사용 시 주의사항
첫 번째는 상속 구조를 너무 복잡하게 만들지 않는 것이 좋습니다.
두 번째는 Target 이름을 명확하게 작성해야 합니다.
세 번째는 상속받은 설정이 어떻게 변경되는지 확인해야 합니다.
네 번째는 공통 설정과 개별 설정을 구분하는 것이 중요합니다.
Best Practice
Docker Buildx Bake 상속 활용 방법:
- 공통 빌드 설정 분리
- Base Target 생성
- 환경별 설정 재사용
- CI/CD 공통 옵션 관리
- 플랫폼 설정 통합
- Cache 설정 중앙화
자주 묻는 질문
Docker Buildx Bake 상속은 무엇인가요?
하나의 Target 설정을 다른 Target에서 재사용하는 기능입니다.
여러 이미지에서 사용할 수 있나요?
가능합니다.
Backend, Frontend 등 여러 Target에서 같은 설정을 공유할 수 있습니다.
상속받은 설정을 변경할 수 있나요?
가능합니다.
자식 Target에서 값을 다시 지정하면 변경됩니다.
작은 프로젝트에서도 사용할 수 있나요?
가능합니다.
하지만 여러 이미지와 복잡한 빌드 환경에서 더 큰 효과를 얻을 수 있습니다.
마무리
Docker Buildx Bake 상속 기능은 반복되는 빌드 설정을 줄이고 Docker 프로젝트를 체계적으로 관리할 수 있도록 도와줍니다.
공통 플랫폼, Cache, Registry 설정 등을 하나의 Target에 작성하고 여러 이미지에서 재사용하면 유지보수가 쉬워지고 빌드 환경을 일관되게 유지할 수 있습니다.
특히 마이크로서비스 구조나 여러 Docker 이미지를 운영하는 환경에서는 Buildx Bake 상속 기능을 활용하면 더욱 효율적인 빌드 자동화 환경을 구축할 수 있습니다.