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 .
생성된 Build 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-from 옵션으로 가져와 사용할 수 있습니다.
Docker Build Cache란 무엇인가?
Docker 이미지는 여러 개의 Layer로 구성됩니다.
예:
FROM node:20
COPY package.json .
RUN npm install
COPY . .
빌드 결과:
Layer 1
Layer 2
Layer 3
Layer 4
변경되지 않은 Layer는 Cache로 저장되어 다음 빌드에서 재사용됩니다.
Docker Buildx Build –cache-to를 사용하는 이유
일반적인 빌드 환경:
docker buildx build \
-t app:v1 .
문제:
새로운 빌드 서버
↓
Cache 없음
↓
전체 빌드 실행
특히 CI/CD 환경에서는 매번 새로운 Runner에서 실행되기 때문에 Cache 저장이 중요합니다.
--cache-to를 사용하면:
빌드 완료
↓
Cache 저장
↓
다음 빌드 재사용
구조를 만들 수 있습니다.
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
↓
company/app:cache
다음 빌드에서 가져올 수 있습니다.
Local Cache 저장하기
개발 환경에서는 로컬 Cache를 사용할 수 있습니다.
예:
docker buildx build \
--cache-to type=local,dest=/tmp/docker-cache \
-t app:v1 .
결과:
/tmp/docker-cache
폴더에 Cache 데이터가 저장됩니다.
Docker Buildx Build Cache Export 방식
대표적인 Cache 저장 방식:
| 방식 | 설명 |
|---|---|
| registry | Docker Registry 저장 |
| local | 로컬 디렉터리 저장 |
| inline | 이미지 내부 저장 |
| gha | GitHub Actions Cache 저장 |
Docker Buildx Build –cache-to와 –cache-from 함께 사용하기
가장 일반적인 구성입니다.
첫 번째 빌드:
docker buildx build \
--cache-to type=registry,ref=company/app:cache \
-t company/app:v1 \
--push .
Cache 저장:
company/app:cache
다음 빌드:
docker buildx build \
--cache-from type=registry,ref=company/app:cache \
--cache-to type=registry,ref=company/app:cache \
-t company/app:v2 \
--push .
기존 Layer를 재사용합니다.
Docker Buildx Build –cache-to 실무 활용 예제
CI/CD 빌드 속도 개선
기존:
docker buildx build \
-t company/app:v1 .
문제:
매번 dependency 설치
전체 Layer 생성
빌드 시간 증가
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 .
효과:
- 빌드 시간 감소
- CI 비용 절감
- 반복 작업 감소
GitHub Actions Cache 활용
예:
- name: Build Docker Image
run: |
docker buildx build \
--cache-from type=gha \
--cache-to type=gha \
-t app:v1 .
GitHub Actions 환경에 Cache를 저장할 수 있습니다.
Linux 서버 문제 해결
CI 서버에서 Docker 빌드 시간이 너무 오래 걸렸습니다.
기존:
docker buildx build \
-t app:v1 .
문제:
매 빌드마다 npm install 실행
동일 Layer 반복 생성
Cache 저장 적용:
docker buildx build \
--cache-from type=registry,ref=app:cache \
--cache-to type=registry,ref=app:cache \
-t app:v1 \
--push .
결과:
첫 번째 빌드
↓
Cache 저장
두 번째 빌드
↓
Cache 재사용
빌드 시간이 크게 줄어들었습니다.
Docker Buildx Build –cache-to 사용 시 주의사항
첫 번째는 Cache 저장 위치를 명확하게 관리해야 합니다.
두 번째는 Cache와 Docker Image는 다른 개념입니다.
세 번째는 오래된 Cache가 계속 쌓이지 않도록 관리해야 합니다.
네 번째는 Registry Cache 권한 설정이 필요할 수 있습니다.
Best Practice
Docker Buildx Build –cache-to 활용 방법:
- CI/CD에서는 Registry Cache 사용
- 개발 환경에서는 Local Cache 활용
- –cache-from과 함께 사용
- Cache Tag 별도 관리
- 정기적인 Cache 정리
- Docker Layer 구조 최적화
자주 묻는 질문
Docker Buildx Build –cache-to는 무엇인가요?
Docker 빌드 과정에서 생성된 Cache를 저장하는 옵션입니다.
–cache-from과 차이는 무엇인가요?
--cache-from은 Cache 가져오기, --cache-to는 Cache 저장 기능입니다.
Cache를 저장하면 이미지도 저장되나요?
아닙니다.
빌드 Layer 재사용을 위한 Cache 데이터만 저장됩니다.
CI/CD에서 사용하면 좋은가요?
네.
반복 빌드가 많은 환경에서 매우 효과적입니다.
마무리
Docker Buildx Build –cache-to는 Docker 이미지 빌드 속도를 향상시키기 위한 핵심 기능입니다.
생성된 Build Cache를 저장하여 다음 빌드에서 재사용할 수 있으며, CI/CD 환경에서는 빌드 시간과 서버 비용을 줄이는 데 큰 도움이 됩니다.
특히 --cache-to와 --cache-from을 함께 구성하면 빠르고 안정적인 Docker 이미지 자동화 환경을 구축할 수 있습니다.