Docker Image를 빠르게 빌드하려면 새로운 Build를 매번 실행하는 것이 아니라 기존에 생성된 Cache Layer를 재사용하는 것이 중요합니다.
특히 CI/CD 환경에서는 매번 새로운 Runner가 생성되기 때문에 이전 Build 결과를 그대로 사용할 수 없습니다.
예:
코드 변경
↓
CI 실행
↓
새로운 Runner 생성
↓
Docker Build 시작
↓
기존 Cache 없음
↓
전체 다시 Build
이러한 문제를 해결하기 위해 Docker Buildx Bake에서는 Cache-from 기능을 제공합니다.
Cache-from은 이전에 저장된 Docker Build Cache를 가져와 재사용하는 기능입니다.
예:
docker-bake.hcl
target "app" {
cache-from = [
"type=registry,ref=registry.example.com/app:cache"
]
}
실행:
docker buildx bake app
결과:
Registry Cache 확인
↓
기존 Build Layer 가져오기
↓
변경된 부분만 Build
이번 글에서는 Docker Buildx Bake Cache-from의 개념부터 Cache 저장소 연결, Registry Cache, GitHub Actions Cache, CI/CD 활용 방법까지 자세히 알아보겠습니다.
Docker Buildx Bake Cache-from이란 무엇인가?
Docker Buildx Bake Cache-from은 외부에 저장된 Build Cache를 가져오는 기능입니다.
기본 구조:
외부 Cache 저장소
↓
Cache-from
↓
Docker Build
↓
기존 Layer 재사용
Cache-from을 사용하면 이전 Build 결과를 활용하여 빌드 시간을 줄일 수 있습니다.
Docker Buildx Bake Cache-from이 필요한 이유
Cache가 없는 Build:
Dockerfile 분석
↓
Base Image 다운로드
↓
Package 설치
↓
Application Build
↓
Image 생성
매번 같은 작업을 반복합니다.
Cache-from 사용:
기존 Cache 확인
↓
변경 없는 Layer 재사용
↓
변경된 부분만 Build
장점:
- Build 시간 단축
- CI 비용 절감
- 서버 자원 절약
- 개발 속도 향상
Docker Buildx Bake Cache-from 기본 설정
docker-bake.hcl:
target "app" {
cache-from = [
"type=registry,ref=company/app:cache"
]
}
동작:
Registry Cache 접근
↓
Cache Layer 다운로드
↓
Docker Build 실행
가장 많이 사용하는 Cache 방식입니다.
Docker Buildx Bake Cache-from 타입 종류
type=registry
Registry에서 Cache 가져오기
예:
cache-from = [
"type=registry,ref=registry.example.com/app:cache"
]
특징:
- 여러 서버 공유 가능
- CI/CD 적합
- 운영 환경 추천
type=local
로컬 Cache 가져오기
예:
cache-from = [
"type=local,src=./cache"
]
활용:
- 개발 PC
- 테스트 환경
type=gha
GitHub Actions Cache 사용
예:
cache-from = [
"type=gha"
]
활용:
- GitHub Actions Pipeline
type=inline
Image 내부 Cache Metadata 사용
예:
cache-from = [
"type=inline"
]
특징:
- 간단한 설정
- Image와 Cache 함께 관리
Docker Buildx Bake Cache-from과 Cache-to 함께 사용하기
실제 운영에서는 Cache-from과 Cache-to를 함께 사용합니다.
예:
target "production" {
cache-from = [
"type=registry,ref=registry.company.com/app:cache"
]
cache-to = [
"type=registry,ref=registry.company.com/app:cache,mode=max"
]
}
동작:
기존 Cache 가져오기
↓
Docker Build
↓
새로운 Cache 저장
항상 최신 Cache를 유지할 수 있습니다.
Docker Buildx Bake Cache-from Registry 활용
Private Registry 예:
target "app" {
cache-from = [
"type=registry,ref=harbor.company.com/app:cache"
]
}
흐름:
Harbor Registry
↓
Cache Pull
↓
Docker Build
기업 환경에서 많이 사용하는 방식입니다.
Docker Buildx Bake Cache-from GitHub Actions 활용
GitHub Actions에서는 GHA Cache를 사용할 수 있습니다.
docker-bake.hcl:
target "app" {
cache-from = [
"type=gha"
]
cache-to = [
"type=gha,mode=max"
]
}
실행:
docker buildx bake app
동작:
GitHub Cache 확인
↓
기존 Layer 복원
↓
Build 실행
Docker Buildx Bake Cache-from Multi-platform 활용
Multi-platform Build에서도 Cache를 가져올 수 있습니다.
예:
target "app" {
platforms = [
"linux/amd64",
"linux/arm64"
]
cache-from = [
"type=registry,ref=company/app:cache"
]
}
결과:
Cache
├── amd64 Layer
└── arm64 Layer
플랫폼별 Build 속도를 개선할 수 있습니다.
Docker Buildx Bake Cache-from CI/CD 활용
GitLab CI 예:
build:
stage: build
script:
- docker buildx bake production --push
Bake:
target "production" {
cache-from = [
"type=registry,ref=registry.company.com/app:cache"
]
}
자동 흐름:
Pipeline 시작
↓
Cache 다운로드
↓
Build
↓
Image Push
Docker Buildx Bake Cache-from 실무 예제
프로젝트:
project/
├── Dockerfile
├── docker-bake.hcl
└── .gitlab-ci.yml
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
결과:
첫 번째 Build
↓
Cache 생성
두 번째 Build
↓
Cache 가져오기
↓
빠른 Build
Docker Buildx Bake Cache-from 확인 방법
Build 로그 확인:
CACHED
표시가 있는지 확인합니다.
Builder 확인:
docker buildx ls
Cache 정보 확인:
docker buildx du
Docker Buildx Bake Cache-from 문제 해결
Cache를 가져오지 못하는 경우
확인:
- Registry 로그인 상태
- Cache Image 존재 여부
- 권한 설정
로그인:
docker login registry.example.com
Cache 효과가 없는 경우
확인:
- Dockerfile Layer 순서
- 자주 변경되는 명령 위치
- Cache 저장 방식
Cache 용량 증가 문제
해결:
오래된 Cache 삭제:
docker buildx prune
Docker Buildx Bake Cache-from 사용 시 주의사항
첫 번째는 Cache-from과 Cache-to를 함께 사용하는 것이 좋습니다.
두 번째는 프로젝트별 Cache 저장소를 분리해야 합니다.
세 번째는 Private Registry 접근 권한을 관리해야 합니다.
네 번째는 오래된 Cache 정리 정책이 필요합니다.
Best Practice
Docker Buildx Bake Cache-from 활용 방법:
- Registry Cache 사용
- Cache-to와 함께 구성
- CI/CD 자동 연결
- Project별 Cache 분리
- Multi-platform Cache 활용
- 정기적인 Cache 관리
자주 묻는 질문
Docker Buildx Bake Cache-from은 무엇인가요?
외부에 저장된 Docker Build Cache를 가져와 재사용하는 기능입니다.
Cache-from과 Cache-to 차이는 무엇인가요?
Cache-from은 Cache 가져오기, Cache-to는 Cache 저장 기능입니다.
CI/CD 환경에서도 사용할 수 있나요?
가능합니다.
GitHub Actions, GitLab CI, Jenkins 등에서 활용할 수 있습니다.
Build 시간이 줄어드나요?
가능합니다.
변경되지 않은 Docker Layer를 재사용하기 때문에 반복 Build 시간이 감소합니다.
마무리
Docker Buildx Bake Cache-from은 Docker Build 속도를 향상시키는 핵심 기능입니다.
저장된 Build Cache를 다시 가져와 기존 Layer를 재사용할 수 있기 때문에 반복적인 Image 생성 과정에서 큰 효과를 얻을 수 있습니다.
특히 CI/CD, Multi-platform Build, Private Registry 환경에서는 Cache-from과 Cache-to를 함께 구성하면 빠르고 안정적인 Docker Build 자동화 환경을 구축할 수 있습니다.