Docker Buildx Build –cache-to 사용법 완벽 가이드! 빌드 Cache 저장하기

Docker 이미지를 반복적으로 빌드하는 환경에서는 빌드 시간이 중요한 요소입니다.

특히 CI/CD 환경에서는 같은 이미지를 여러 번 빌드하기 때문에 다음과 같은 문제가 발생할 수 있습니다.

  • 매번 의존성 다시 설치
  • 동일한 Docker Layer 반복 생성
  • 빌드 시간 증가
  • 서버 리소스 낭비

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

그중 --cache-to 옵션은 현재 빌드 과정에서 생성된 Cache를 저장하는 기능입니다.

예:

docker buildx build \
--cache-to type=registry,ref=company/app:cache \
-t company/app:v1 \
--push .

생성된 빌드 Cache를 Registry에 저장하여 다음 빌드에서 재사용할 수 있습니다.

이번 글에서는 Docker Buildx Build –cache-to의 개념부터 기본 사용법, Cache 저장 방식, Registry Cache 활용, CI/CD 최적화 방법까지 자세히 알아보겠습니다.

Docker Buildx Build –cache-to란 무엇인가?

--cache-to는 Docker Buildx 빌드 과정에서 생성된 Cache 데이터를 저장하는 옵션입니다.

기본 형식:

docker buildx build \
--cache-to CACHE_EXPORTER .

빌드 과정:

Dockerfile

↓

Docker Layer 생성

↓

Build Cache 생성

↓

Cache 저장

저장된 Cache는 이후 빌드에서 --cache-from으로 가져올 수 있습니다.

Docker Build Cache란 무엇인가?

Docker 이미지는 여러 개의 Layer로 구성됩니다.

예:

FROM node

COPY package.json .

RUN npm install

COPY . .

빌드 결과:

Layer 1

Layer 2

Layer 3

Layer 4

변경되지 않은 Layer는 Cache로 저장하여 재사용할 수 있습니다.

Docker Buildx Build –cache-to는 언제 사용하는가?

다음 환경에서 많이 사용합니다.

  • CI/CD 자동 빌드
  • 대규모 프로젝트
  • Kubernetes 배포
  • Docker 이미지 최적화
  • 반복 빌드 환경

특히 매번 새로운 빌드 서버를 사용하는 CI 환경에서 효과가 큽니다.

Docker Buildx Build –cache-to 기본 사용법

기본 예제:

docker buildx build \
--cache-to type=local,dest=./cache \
-t app:v1 .

로컬 폴더에 Cache를 저장합니다.

Registry Cache 저장하기

운영 환경에서는 Registry Cache를 가장 많이 사용합니다.

예:

docker buildx build \
--cache-to type=registry,ref=company/app:cache \
-t company/app:v1 \
--push .

Docker Registry에 Cache Layer가 저장됩니다.

Local Cache 저장하기

개발 환경에서는 로컬 Cache를 사용할 수 있습니다.

예:

docker buildx build \
--cache-to type=local,dest=/tmp/docker-cache \
-t app:v1 .

현재 서버 디스크에 Cache를 저장합니다.

Docker Buildx Cache 저장 방식 종류

주요 Cache Export 방식:

방식설명
registryDocker Registry 저장
local로컬 디렉터리 저장
inline이미지 내부 저장
ghaGitHub Actions Cache

Docker Buildx Build –cache-to와 –cache-from 함께 사용하기

가장 일반적인 구성입니다.

첫 번째 빌드:

docker buildx build \
--cache-to type=registry,ref=app:cache \
-t app:v1 \
--push .

Cache 저장:

app:cache

다음 빌드:

docker buildx build \
--cache-from type=registry,ref=app:cache \
--cache-to type=registry,ref=app:cache \
-t app:v2 \
--push .

기존 Cache를 활용합니다.

Docker Buildx Build –cache-to 실무 활용 예제

CI/CD 빌드 속도 개선

기존:

docker buildx build \
-t company/app:v1 .

매번 전체 빌드를 실행합니다.

Cache 적용:

docker buildx build \
--cache-from type=registry,ref=company/app:cache \
--cache-to type=registry,ref=company/app:cache \
-t company/app:v1 \
--push .

효과:

  • Layer 재사용
  • 빌드 시간 감소
  • CI 비용 절감

GitHub Actions Cache 활용

GitHub Actions 환경에서는:

- name: Build
  run: |
    docker buildx build \
    --cache-to type=gha \
    --cache-from type=gha \
    -t app:v1 .

GitHub Cache 저장소를 사용할 수 있습니다.

Linux 서버 문제 해결

CI/CD 환경에서 Docker 빌드 시간이 너무 길어지는 문제가 발생했습니다.

기존:

docker buildx build \
-t company/app:v1 .

문제:

매 빌드마다 dependency 재설치

Cache 저장 설정 추가:

docker buildx build \
--cache-to type=registry,ref=company/app:cache \
--cache-from type=registry,ref=company/app:cache \
-t company/app:v1 \
--push .

첫 번째 빌드:

Cache 생성

두 번째 빌드:

Cache 재사용

결과적으로 빌드 시간이 크게 줄어들었습니다.

Docker Buildx Build –cache-to는 반복적인 Docker 이미지 빌드를 최적화하는 핵심 기능입니다.

Docker Buildx Build –cache-to 사용 시 주의사항

첫 번째는 Cache 저장 위치를 신중하게 선택해야 합니다.

두 번째는 Registry Cache Tag를 별도로 관리하는 것이 좋습니다.

세 번째는 오래된 Cache가 계속 쌓이지 않도록 관리가 필요합니다.

네 번째는 Cache는 이미지 자체가 아니므로 별도 관리해야 합니다.

Best Practice

Docker Buildx Build –cache-to 활용 방법:

  • CI/CD는 Registry Cache 사용
  • 개발 환경은 Local Cache 활용
  • –cache-from과 함께 사용
  • Cache Tag 별도 관리
  • 정기적으로 오래된 Cache 정리
  • 빌드 시간 변화를 확인

자주 묻는 질문

Docker Buildx Build –cache-to는 무엇인가요?

빌드 과정에서 생성된 Cache를 저장하는 옵션입니다.

–cache-from과 차이는 무엇인가요?

--cache-to는 저장, --cache-from은 가져오기 기능입니다.

Cache를 저장하면 이미지가 저장되나요?

아닙니다.

빌드 Layer 재사용을 위한 Cache 데이터입니다.

CI/CD에서 사용하면 좋은가요?

네.

반복 빌드가 많은 환경에서 큰 효과가 있습니다.

마무리

Docker Buildx Build –cache-to는 Docker 이미지 빌드 속도를 개선하기 위한 중요한 기능입니다.

생성된 Build Cache를 저장해 다음 빌드에서 재사용할 수 있으며, CI/CD 환경에서는 빌드 시간과 비용을 줄이는 데 매우 효과적입니다.

특히 --cache-to--cache-from을 함께 구성하면 빠르고 안정적인 Docker 이미지 자동화 환경을 구축할 수 있습니다.

댓글 남기기