Docker 이미지를 반복적으로 빌드하면 같은 작업이 계속 반복되는 문제가 발생할 수 있습니다.
예:
- 패키지 다시 설치
- 동일한 Docker Layer 다시 생성
- 빌드 시간 증가
- CI/CD 비용 증가
Docker는 이러한 문제를 해결하기 위해 Build Cache 기능을 제공합니다.
Build Cache는 이전 빌드 결과를 저장하고 재사용하여 Docker 이미지 생성 속도를 향상시키는 기능입니다.
Docker Buildx Build에서는 외부에 저장된 Cache를 가져와 사용할 수 있는 옵션을 제공합니다.
바로 **--cache-from**입니다.
예:
docker buildx build \
--cache-from type=registry,ref=company/app:cache \
-t app:v1 .
저장된 Cache를 활용하여 빠르게 이미지를 빌드할 수 있습니다.
이번 글에서는 Docker Buildx Build –cache-from의 개념부터 Cache 종류, Registry Cache 활용, CI/CD 빌드 최적화 방법까지 자세히 알아보겠습니다.
Docker Buildx Build –cache-from이란 무엇인가?
--cache-from은 기존에 저장된 Docker Build Cache를 가져오는 옵션입니다.
기본 형식:
docker buildx build \
--cache-from CACHE_SOURCE .
동작 과정:
저장된 Build Cache
↓
Docker Buildx 가져오기
↓
변경 없는 Layer 재사용
↓
빠른 이미지 빌드
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-from이 필요한 이유
일반적인 환경:
docker buildx build .
문제:
새로운 빌드 환경
↓
기존 Cache 없음
↓
전체 빌드 실행
특히 CI/CD 서버는 매번 새로운 환경에서 실행되는 경우가 많습니다.
--cache-from을 사용하면:
외부 Cache 가져오기
↓
Layer 재사용
↓
빌드 시간 감소
가 가능합니다.
Docker Buildx Build –cache-from 기본 사용법
Local Cache 사용
예:
docker buildx build \
--cache-from type=local,src=./cache \
-t app:v1 .
로컬 폴더의 Cache를 가져옵니다.
Registry Cache 사용
운영 환경에서는 Registry Cache를 많이 사용합니다.
예:
docker buildx build \
--cache-from type=registry,ref=company/app:cache \
-t company/app:v1 .
Registry에 저장된 Cache를 가져옵니다.
Docker Buildx Build –cache-from과 –cache-to 함께 사용하기
가장 일반적인 패턴입니다.
Cache 저장:
docker buildx build \
--cache-to type=registry,ref=company/app:cache \
-t company/app:v1 \
--push .
Cache 가져오기:
docker buildx build \
--cache-from type=registry,ref=company/app:cache \
-t company/app:v2 \
--push .
구조:
첫 번째 빌드
↓
Cache 저장
↓
다음 빌드
↓
Cache 재사용
Docker Buildx Build –cache-from Cache 방식 종류
| 방식 | 설명 |
|---|---|
| registry | Docker Registry Cache 사용 |
| local | 로컬 폴더 Cache 사용 |
| gha | GitHub Actions Cache 사용 |
| s3 | S3 기반 Cache 사용 |
Docker Buildx Build –cache-from 실무 활용 예제
CI/CD 빌드 속도 개선
기존:
docker buildx build \
-t company/app:v1 .
문제:
매번 전체 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 .
결과:
- Layer 재사용
- 빌드 시간 감소
- CI 비용 절감
GitHub Actions 활용
예:
- name: Build Docker Image
run: |
docker buildx build \
--cache-from type=gha \
--cache-to type=gha \
-t app:v1 .
GitHub Cache를 활용할 수 있습니다.
Linux 서버 문제 해결
CI 서버에서 Docker 이미지를 빌드했습니다.
기존:
docker buildx build \
-t app:v1 .
문제:
매번 npm install 실행
빌드 시간 증가
Cache 적용:
docker buildx build \
--cache-from type=registry,ref=app:cache \
--cache-to type=registry,ref=app:cache \
-t app:v1 \
--push .
결과:
기존 Layer 재사용
빌드 시간 감소
효율적인 CI/CD 환경을 구성할 수 있었습니다.
Docker Buildx Build –cache-from 사용 시 주의사항
첫 번째는 Cache가 반드시 먼저 저장되어 있어야 합니다.
두 번째는 Cache와 Image는 서로 다른 개념입니다.
세 번째는 오래된 Cache는 주기적으로 관리해야 합니다.
네 번째는 프로젝트 변경 구조에 따라 Cache 효율이 달라집니다.
Best Practice
Docker Buildx Build –cache-from 활용 방법:
- CI/CD 환경에서 적극 활용
- –cache-to와 함께 사용
- Registry Cache 관리
- Docker Layer 구조 최적화
- Cache 정리 정책 운영
- 빌드 시간 지속 측정
자주 묻는 질문
Docker Buildx Build –cache-from은 무엇인가요?
외부에 저장된 Docker Build Cache를 가져오는 옵션입니다.
–cache-from과 –cache-to 차이는 무엇인가요?
--cache-from은 Cache 가져오기, --cache-to는 Cache 저장입니다.
Cache를 사용하면 항상 빨라지나요?
대부분 빠르지만 Dockerfile 구조와 변경 내용에 따라 효과가 달라집니다.
이미지 자체를 가져오는 기능인가요?
아닙니다.
빌드 과정에서 재사용할 Layer Cache를 가져오는 기능입니다.
마무리
Docker Buildx Build –cache-from은 Docker 이미지 빌드 속도를 높이는 핵심 옵션입니다.
외부에 저장된 Build Cache를 활용하여 반복적인 Layer 생성을 줄이고, CI/CD 환경에서 빌드 시간과 비용을 크게 절감할 수 있습니다.
특히 --cache-from과 --cache-to를 함께 사용하면 안정적인 Cache 관리 시스템을 구축할 수 있으며, 대규모 Docker 프로젝트에서는 필수적인 최적화 방법입니다.