Docker Buildx Bake Cache-from 사용법 완벽 가이드! 기존 Build Cache 가져오기

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 자동화 환경을 구축할 수 있습니다.

댓글 남기기