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

Docker Image Build 과정에서 가장 많은 시간을 차지하는 부분은 반복적인 작업입니다.

예:

  • Package 설치
  • Dependency 다운로드
  • Source Compile
  • Application Build

매번 모든 과정을 처음부터 실행하면 Build 시간이 크게 증가합니다.

기본 Build:

Dockerfile 실행

↓

모든 Layer 생성

↓

Image 완성

Cache 적용:

기존 Layer 확인

↓

변경 없는 작업 재사용

↓

빠른 Build 완료

Docker Buildx Bake에서는 Cache 기능을 활용하여 Build 시간을 크게 줄이고 효율적인 Image 생성 환경을 만들 수 있습니다.

예:

docker buildx bake production

Cache 활용 결과:

기존 Build Layer 재사용

↓

불필요한 작업 생략

↓

Build 속도 향상

이번 글에서는 Docker Buildx Bake Cache의 개념부터 Cache 저장 방식, Local Cache, Registry Cache, CI/CD Cache 공유, 실무 최적화 방법까지 자세히 알아보겠습니다.

Docker Buildx Bake Cache란 무엇인가?

Docker Buildx Bake Cache는 이전 Build 결과를 저장하고 재사용하는 기능입니다.

Docker Build는 Dockerfile의 각 명령어를 Layer 단위로 관리합니다.

예:

FROM node:20

COPY package.json .

RUN npm install

COPY . .

RUN npm build

Build 과정:

FROM Layer

↓

Package Layer

↓

Source Layer

↓

Build Layer

변경되지 않은 Layer는 다시 실행하지 않고 Cache에서 가져옵니다.

Docker Buildx Bake Cache가 필요한 이유

Cache가 없는 Build:

Code 변경

↓

전체 Dockerfile 실행

↓

모든 Package 재설치

↓

느린 Build

Cache 사용:

Code 변경

↓

변경된 Layer만 실행

↓

빠른 Build

장점:

  • Build 시간 감소
  • CI/CD 속도 향상
  • 서버 비용 절감
  • 개발 생산성 증가

Docker Buildx Bake Cache 기본 사용법

docker-bake.hcl:

target "app" {

  cache-from = [

    "type=local,src=./cache"

  ]

  cache-to = [

    "type=local,dest=./cache"

  ]

}

구조:

cache-from

↓

기존 Cache 가져오기


cache-to

↓

새 Cache 저장

Docker Buildx Bake Cache Local 사용법

Local Cache는 현재 서버 또는 개발 환경에 Cache를 저장합니다.

설정:

target "app" {

  cache-to = [

    "type=local,dest=.build-cache"

  ]

}

결과:

project/

├── .build-cache/

├── Dockerfile

└── docker-bake.hcl

활용:

  • 개인 개발 환경
  • 테스트 서버
  • 빠른 반복 Build

Docker Buildx Bake Cache Registry 사용법

팀 환경에서는 Registry Cache를 많이 사용합니다.

예:

target "production" {

  cache-from = [

    "type=registry,ref=company/app:cache"

  ]

  cache-to = [

    "type=registry,ref=company/app:cache"

  ]

}

동작:

Registry

↓

Build Cache 저장

↓

다른 서버에서도 사용 가능

장점:

  • 팀 공유 가능
  • CI/CD 최적화
  • 여러 Runner 활용

Docker Buildx Bake Cache CI/CD 활용

CI 환경에서는 매번 새로운 Runner가 생성됩니다.

문제:

새 Runner 생성

↓

Cache 없음

↓

처음부터 Build

Cache 적용:

Cache 다운로드

↓

기존 Layer 재사용

↓

빠른 Build

GitHub Actions 예:

- name: Build

  run: |

    docker buildx bake production

Bake:

cache-from = [

"type=gha"

]

cache-to = [

"type=gha"

]

결과:

GitHub Cache 저장

↓

다음 Build 재사용

Docker Buildx Bake Cache Export / Import

Cache를 파일 형태로 이동할 수 있습니다.

Export:

cache-to = [

"type=local,dest=./cache"

]

Import:

cache-from = [

"type=local,src=./cache"

]

활용:

  • Build 서버 이동
  • Offline 환경
  • Backup 관리

Docker Buildx Bake Cache와 Multi-platform Build

Multi-platform Build에서는 Cache 관리가 더욱 중요합니다.

예:

linux/amd64

+

linux/arm64

Cache 적용:

target "production" {

platforms = [

"linux/amd64",

"linux/arm64"

]

}

효과:

  • 반복 Build 감소
  • Platform별 Layer 재사용

Docker Buildx Bake Cache 실무 예제

프로젝트:

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"

]

}

실행:

docker buildx bake production --push

결과:

Image Build

↓

Cache 저장

↓

다음 Build 속도 향상

Docker Buildx Bake Cache 확인 방법

Cache 목록 확인:

docker buildx du

Build 로그 확인:

docker buildx bake production

확인:

CACHED

↓

Cache 사용 중

Docker Buildx Bake Cache 문제 해결

Cache가 적용되지 않는 경우

확인:

docker buildx du

Cache 존재 여부 확인

Cache 용량 증가

정리:

docker buildx prune

CI Cache 실패

확인:

  • Cache 권한
  • Registry 접근
  • Cache 경로

Docker Buildx Bake Cache 사용 시 주의사항

첫 번째는 Cache 저장 공간을 관리해야 합니다.

두 번째는 Production 환경에서는 Registry Cache 활용이 효과적입니다.

세 번째는 Cache가 오래되면 정리가 필요합니다.

네 번째는 보안 환경에서는 Cache 공유 범위를 확인해야 합니다.

Best Practice

Docker Buildx Bake Cache 활용 방법:

  • Local 개발 → local Cache
  • CI/CD → gha Cache
  • Production → registry Cache
  • Multi-platform → Cache 공유
  • 정기 Cache 정리
  • Build 시간 최적화

자주 묻는 질문

Docker Buildx Bake Cache는 무엇인가요?

기존 Build 결과를 저장하고 재사용하여 Build 속도를 높이는 기능입니다.

Cache를 사용하면 Image 크기가 줄어드나요?

직접적으로 줄어들지는 않지만 Build 시간을 줄이는 효과가 있습니다.

CI/CD에서도 Cache를 사용할 수 있나요?

가능합니다.

GitHub Actions Cache, Registry Cache 등을 활용할 수 있습니다.

Cache 삭제가 필요한가요?

오래된 Cache가 쌓이면 저장 공간 확보를 위해 정리가 필요합니다.

마무리

Docker Buildx Bake Cache는 빠르고 효율적인 Docker Image Build 환경을 구축하기 위한 핵심 기능입니다.

개발 환경에서는 Local Cache, CI/CD에서는 GitHub Actions Cache, 운영 환경에서는 Registry Cache를 활용하면 반복적인 Build 작업을 크게 줄일 수 있습니다.

특히 대규모 서버 운영과 자동 배포 환경에서는 Cache 전략을 제대로 구성하는 것이 Build 속도와 운영 효율을 결정하는 중요한 요소입니다.

댓글 남기기