Docker Buildx Bake Cache 사용법 완벽 가이드! 빌드 속도 최적화하기

Docker 이미지를 빌드하는 과정에서 가장 시간이 오래 걸리는 작업 중 하나는 반복되는 Layer 생성입니다.

예:

  • 패키지 설치
  • 의존성 다운로드
  • 소스 코드 복사
  • 애플리케이션 빌드

매번 같은 작업을 다시 실행하면 빌드 시간이 길어지고 CI/CD 비용도 증가합니다.

예:

docker buildx bake

실행할 때마다:

Dockerfile 분석

↓

Package 설치

↓

Layer 생성

↓

Image 생성

과정을 반복합니다.

Docker Buildx Bake에서는 이러한 문제를 해결하기 위해 Cache 기능을 제공합니다.

Cache를 사용하면 이전 빌드 결과를 저장하고 다음 빌드에서 재사용할 수 있습니다.

예:

docker-bake.hcl

target "app" {

  cache-from = [
    "type=registry,ref=company/app:cache"
  ]

  cache-to = [
    "type=registry,ref=company/app:cache"
  ]

}

기존 Build Cache를 가져오고 새로운 Cache를 저장할 수 있습니다.

이번 글에서는 Docker Buildx Bake Cache의 개념부터 Cache 종류, cache-from, cache-to 설정, CI/CD 활용 방법까지 자세히 알아보겠습니다.

Docker Buildx Bake Cache란 무엇인가?

Docker Buildx Bake Cache는 Docker 이미지 빌드 과정에서 생성되는 Layer 결과를 저장하고 재사용하는 기능입니다.

기본 구조:

첫 번째 빌드

Build Cache 생성

Cache 저장

다음 빌드

Cache 재사용

Cache를 활용하면 변경되지 않은 작업을 다시 실행하지 않습니다.

Docker Buildx Bake Cache가 필요한 이유

Cache가 없는 경우:

docker buildx bake

동작:

Base Image 다운로드

↓

Package 설치

↓

Application Build

↓

Image 생성

변경사항이 없는 부분도 다시 실행됩니다.

Cache 적용:

기존 Cache 확인

↓

변경 없는 Layer 재사용

↓

변경된 부분만 Build

장점:

  • 빌드 시간 감소
  • CI/CD 비용 절감
  • 서버 리소스 절약
  • 개발 생산성 향상

Docker Buildx Bake Cache 기본 설정

docker-bake.hcl

target "app" {

  cache-from = [
    "type=registry,ref=company/app:cache"
  ]

  cache-to = [
    "type=registry,ref=company/app:cache"
  ]

}

구성:

cache-from

= 기존 Cache 가져오기

cache-to

= 새로운 Cache 저장하기

Docker Buildx Bake Cache 종류

Docker Buildx Bake에서는 다양한 Cache 저장 방식을 사용할 수 있습니다.

Registry Cache

가장 많이 사용하는 방식입니다.

예:

cache-from = [
  "type=registry,ref=company/app:cache"
]

cache-to = [
  "type=registry,ref=company/app:cache"
]

장점:

  • 여러 서버 공유 가능
  • CI/CD 적합
  • 운영 환경 활용 가능

Local Cache

로컬 디렉터리에 저장합니다.

예:

cache-to = [
  "type=local,dest=./cache"
]

활용:

  • 개발 환경
  • 테스트 서버

GitHub Actions Cache

GitHub Actions 환경에서 사용합니다.

예:

cache-from = [
  "type=gha"
]

cache-to = [
  "type=gha"
]

장점:

  • GitHub Runner 재사용
  • CI 빌드 속도 향상

Docker Buildx Bake Cache-from 사용법

cache-from은 저장된 Cache를 가져오는 옵션입니다.

예:

target "app" {

  cache-from = [
    "type=registry,ref=company/app:cache"
  ]

}

동작:

Registry Cache 확인

기존 Layer 가져오기

빠른 Build 실행

Docker Buildx Bake Cache-to 사용법

cache-to는 생성된 Cache를 저장하는 옵션입니다.

예:

target "app" {

  cache-to = [
    "type=registry,ref=company/app:cache"
  ]

}

동작:

Build 실행

새로운 Layer 생성

Cache 저장

Docker Buildx Bake Cache와 여러 이미지 관리

여러 이미지를 운영하는 환경에서는 공통 Cache 설정을 상속할 수 있습니다.

예:

target "base" {

  cache-from = [
    "type=registry,ref=company/cache"
  ]

  cache-to = [
    "type=registry,ref=company/cache"
  ]

}


target "backend" {

  inherits = [
    "base"
  ]

}


target "frontend" {

  inherits = [
    "base"
  ]

}

효과:

Backend

Cache 적용

Frontend

Cache 적용

공통 Cache 설정을 재사용할 수 있습니다.

Docker Buildx Bake Cache 실무 활용 예제

운영 환경 Registry Cache 구성

docker-bake.hcl

target "production" {

  tags = [
    "company/app:v1"
  ]

  cache-from = [
    "type=registry,ref=company/app:cache"
  ]

  cache-to = [
    "type=registry,ref=company/app:cache"
  ]

}

실행:

docker buildx bake production

결과:

  • 기존 Cache 사용
  • 새로운 Cache 저장
  • 빠른 이미지 생성

CI/CD에서 Docker Buildx Bake Cache 활용

GitHub Actions:

- name: Build Image
  run: |
    docker buildx bake --push

Cache 흐름:

GitHub Runner

↓

Cache 가져오기

↓

Docker Build

↓

Cache 저장

↓

Image Push

효과:

  • 반복 빌드 속도 향상
  • Runner 초기화 문제 해결
  • 자동 배포 최적화

Docker Buildx Bake Cache와 Multi-platform 빌드

멀티 플랫폼 환경에서도 Cache를 사용할 수 있습니다.

예:

target "app" {

  platforms = [
    "linux/amd64",
    "linux/arm64"
  ]

  cache-from = [
    "type=registry,ref=company/app:cache"
  ]

  cache-to = [
    "type=registry,ref=company/app:cache"
  ]

}

지원 환경:

  • Intel 서버
  • ARM 서버
  • Apple Silicon

Linux 서버 문제 해결

Docker 이미지를 빌드할 때 매번 같은 Package 설치 과정이 반복되었습니다.

기존:

docker buildx bake

문제:

  • 빌드 시간 증가
  • CPU 사용량 증가
  • CI 비용 증가

Cache 적용:

docker-bake.hcl

target "app" {

  cache-from = [
    "type=registry,ref=company/app:cache"
  ]

  cache-to = [
    "type=registry,ref=company/app:cache"
  ]

}

결과:

첫 번째 빌드:

전체 Layer 생성

두 번째 빌드:

기존 Layer 재사용

빌드 시간을 크게 줄일 수 있었습니다.

Docker Buildx Bake Cache 사용 시 주의사항

첫 번째는 Cache 저장 위치를 명확하게 관리해야 합니다.

두 번째는 오래된 Cache 정리 정책이 필요합니다.

세 번째는 Cache와 Image는 다른 개념이라는 점을 이해해야 합니다.

네 번째는 CI/CD 환경에서는 공유 가능한 Cache 방식을 사용하는 것이 좋습니다.

Best Practice

Docker Buildx Bake Cache 활용 방법:

  • 운영 환경은 Registry Cache 사용
  • CI/CD는 GHA Cache 활용
  • cache-from과 cache-to 함께 사용
  • 공통 Cache 설정 상속
  • 오래된 Cache 관리
  • Build Layer 구조 최적화

자주 묻는 질문

Docker Buildx Bake Cache는 무엇인가요?

Docker 이미지 빌드 결과를 저장하고 재사용하는 기능입니다.

Cache를 사용하면 이미지 크기가 줄어드나요?

아닙니다.

Cache는 빌드 속도를 높이기 위한 기능입니다.

Cache는 어디에 저장할 수 있나요?

Registry, Local, GitHub Actions Cache 등 다양한 위치에 저장할 수 있습니다.

운영 환경에서도 사용할 수 있나요?

가능합니다.

특히 여러 서버와 CI/CD 환경에서는 Registry Cache 사용을 많이 합니다.

마무리

Docker Buildx Bake Cache는 Docker 이미지 빌드 속도를 향상시키는 핵심 기능입니다.

반복되는 Layer 작업을 저장하고 재사용하여 불필요한 빌드 과정을 줄일 수 있으며, CI/CD 환경에서는 빌드 시간과 비용을 크게 절감할 수 있습니다.

특히 cache-fromcache-to를 함께 사용하면 안정적인 Cache 관리 환경을 구축할 수 있고, 여러 Docker 이미지를 운영하는 환경에서도 효율적인 빌드 자동화를 구현할 수 있습니다.

댓글 남기기