Docker Image Build 과정에서 Cache는 Build 속도를 크게 향상시키는 중요한 기능입니다.
하지만 하나의 개발 환경에서만 Cache를 사용하는 것이 아니라 여러 서버, CI/CD 환경, 팀 구성원이 함께 사용해야 하는 경우가 많습니다.
예:
개발 서버
↓
Build Cache 생성
CI 서버
↓
같은 Cache 활용
또는:
기존 Build 서버
↓
Cache Export
↓
새로운 Build 서버
↓
Cache Import
이러한 환경에서는 Cache를 내보내고 가져오는 기능이 필요합니다.
Docker Buildx Bake에서는 cache-to와 cache-from 설정을 사용하여 Build Cache를 Export하고 Import할 수 있습니다.
예:
docker-bake.hcl
target "app" {
cache-to = [
"type=local,dest=./cache"
]
cache-from = [
"type=local,src=./cache"
]
}
동작:
Build 실행
↓
Cache 저장
↓
다음 Build에서 Cache 불러오기
↓
빠른 Build 진행
이번 글에서는 Docker Buildx Bake Cache Export/Import 개념부터 Local Cache 이동, Registry Cache 공유, CI/CD 활용, 실무 운영 방법까지 자세히 알아보겠습니다.
Docker Buildx Bake Cache Export/Import란 무엇인가?
Docker Buildx Bake Cache Export/Import는 Build 과정에서 생성된 Cache 데이터를 저장하고 다시 사용하는 기능입니다.
구조:
Build
↓
Cache 생성
↓
Export
↓
저장소 보관
↓
Import
↓
다른 Build에서 사용
Cache Export:
현재 Build Cache
↓
외부 저장
Cache Import:
저장된 Cache
↓
새로운 Build 적용
Docker Buildx Bake Cache Export/Import가 필요한 이유
일반적인 Cache는 하나의 환경에 저장됩니다.
예:
개발 PC
↓
Cache 생성
↓
개발 PC에서만 사용
문제:
- 다른 서버에서 재사용 불가
- CI 환경에서 Cache 없음
- Build 시간이 증가
Export/Import 사용:
Build Cache
↓
공유 저장소
↓
여러 환경에서 사용
장점:
- Build 시간 단축
- CI/CD 속도 향상
- 여러 서버 공유 가능
- 반복 작업 감소
Docker Buildx Bake Cache Export 기본 사용법
Local Cache Export:
target "app" {
cache-to = [
"type=local,dest=./build-cache"
]
}
실행:
docker buildx bake app
결과:
project/
├── build-cache/
├── Dockerfile
└── docker-bake.hcl
Build Cache가 폴더 형태로 저장됩니다.
Docker Buildx Bake Cache Import 기본 사용법
저장된 Cache 가져오기:
target "app" {
cache-from = [
"type=local,src=./build-cache"
]
}
실행:
docker buildx bake app
동작:
build-cache
↓
기존 Layer 확인
↓
변경 없는 작업 재사용
Docker Buildx Bake Local Cache 이동하기
서버 A:
Build 서버 A
↓
Cache 생성
Export:
cache-to = [
"type=local,dest=/backup/cache"
]
서버 B:
cache-from = [
"type=local,src=/backup/cache"
]
결과:
서버 A Cache
↓
서버 B 사용
↓
빠른 Build
활용:
- 서버 이전
- 개발 환경 공유
- Offline Build
Docker Buildx Bake Registry Cache Export/Import
실무 환경에서는 Registry Cache를 많이 사용합니다.
설정:
target "production" {
cache-to = [
"type=registry,ref=registry.company.com/app:cache"
]
cache-from = [
"type=registry,ref=registry.company.com/app:cache"
]
}
구조:
Docker Registry
↓
Build Cache 저장
↓
여러 Runner 사용
장점:
- 팀 공유 가능
- CI 환경 최적화
- 서버 간 이동 불필요
Docker Buildx Bake Cache Export/Import CI/CD 활용
CI/CD에서는 Runner가 매번 새롭게 생성됩니다.
기본:
새 Runner 생성
↓
Cache 없음
↓
전체 Build 실행
Cache Import 적용:
Runner 생성
↓
Registry Cache 가져오기
↓
기존 Layer 재사용
GitHub Actions 예:
- name: Build Image
run: |
docker buildx bake production
Bake:
cache-from = [
"type=registry,ref=image:cache"
]
cache-to = [
"type=registry,ref=image:cache"
]
결과:
CI Build 속도 향상
↓
배포 시간 감소
Docker Buildx Bake Cache Export/Import와 Multi-platform Build
Multi-platform Build에서는 Cache 공유가 중요합니다.
예:
linux/amd64
+
linux/arm64
설정:
target "production" {
platforms = [
"linux/amd64",
"linux/arm64"
]
cache-to = [
"type=registry,ref=image:cache"
]
}
효과:
- Platform별 Layer 관리
- 반복 Build 감소
- CI 시간 단축
Docker Buildx Bake Cache Export/Import 실무 예제
프로젝트:
project/
├── Dockerfile
├── docker-bake.hcl
└── cache/
docker-bake.hcl:
target "production" {
tags = [
"registry.company.com/app:v1"
]
cache-from = [
"type=registry,ref=registry.company.com/app:cache"
]
cache-to = [
"type=registry,ref=registry.company.com/app:cache,mode=max"
]
}
실행:
docker buildx bake production --push
결과:
Image Build
↓
Cache Export
↓
Registry 저장
↓
다음 Build 재사용
Docker Buildx Bake Cache Mode 설정
Cache Export에는 Mode 옵션이 있습니다.
mode=min
기본 Cache 저장 방식
특징:
- 필요한 최소 Layer 저장
- 저장 공간 절약
mode=max
전체 Cache 저장 방식
예:
cache-to = [
"type=registry,ref=image:cache,mode=max"
]
특징:
- 더 많은 Layer 저장
- 다음 Build 속도 향상
비교:
| 방식 | 특징 |
|---|---|
| mode=min | 저장 공간 절약 |
| mode=max | Build 속도 최적화 |
Docker Buildx Bake Cache 확인 방법
Cache 확인:
docker buildx du
Build 로그:
docker buildx bake app
확인:
CACHED
↓
Cache 적용
Docker Buildx Bake Cache Export/Import 문제 해결
Cache를 가져오지 못하는 경우
확인:
docker buildx du
확인 항목:
- Cache 경로
- Registry 권한
- Image Tag
Registry Cache 접근 오류
확인:
- Docker Login
- Registry 주소
- Push 권한
Cache 용량 증가
정리:
docker buildx prune
Docker Buildx Bake Cache Export/Import 사용 시 주의사항
첫 번째는 Cache 저장 위치를 안정적으로 관리해야 합니다.
두 번째는 Registry Cache 사용 시 접근 권한 설정이 필요합니다.
세 번째는 Production 환경에서는 mode=max 사용 여부를 고려해야 합니다.
네 번째는 오래된 Cache는 정기적으로 정리해야 합니다.
Best Practice
Docker Buildx Bake Cache Export/Import 활용 방법:
- 개발 환경 → Local Cache
- CI/CD → Registry Cache
- 팀 환경 → Shared Cache
- Production → mode=max 검토
- 정기 Cache 정리
- Build 시간 최적화
자주 묻는 질문
Cache Export와 Import는 무엇인가요?
Build Cache를 저장하고 다른 환경에서 다시 사용하는 기능입니다.
여러 서버에서 같은 Cache를 사용할 수 있나요?
가능합니다.
Registry Cache를 사용하면 여러 서버에서 공유할 수 있습니다.
CI/CD에서 꼭 사용해야 하나요?
대규모 프로젝트에서는 Build 시간을 줄이기 위해 많이 사용합니다.
mode=max는 언제 사용하나요?
Build 속도가 중요하고 저장 공간이 충분한 환경에서 적합합니다.
마무리
Docker Buildx Bake Cache Export/Import는 여러 환경에서 Docker Build 속도를 최적화하기 위한 핵심 기능입니다.
Local Cache는 개인 개발 환경에 적합하고, Registry Cache는 팀 개발과 CI/CD 환경에서 효과적으로 활용할 수 있습니다.
특히 서버 운영 환경에서는 Cache 전략을 잘 구성하면 반복적인 Image Build 시간을 크게 줄이고 안정적인 배포 Pipeline을 구축할 수 있습니다.