Docker 이미지를 반복적으로 빌드하다 보면 같은 작업을 계속 수행하게 됩니다.
예를 들어 애플리케이션 코드를 조금 수정하고 다시 빌드할 때:
- 운영체제 패키지 설치
- 라이브러리 다운로드
- 의존성 설치
- Docker 이미지 Layer 생성
같은 과정이 매번 반복될 수 있습니다.
이 과정은 프로젝트 규모가 커질수록 빌드 시간을 크게 증가시킵니다.
Docker Buildx는 이러한 문제를 해결하기 위해 Build Cache 기능을 제공합니다.
그중 --cache-from 옵션은 이전에 저장된 빌드 Cache를 가져와 재사용하는 기능입니다.
예:
docker buildx build \
--cache-from type=registry,ref=company/app:cache \
-t company/app:v1 .
기존 Cache를 활용하여 불필요한 재빌드를 줄일 수 있습니다.
이번 글에서는 Docker Buildx Build –cache-from의 개념부터 기본 사용법, Cache 저장 위치, CI/CD 활용 방법, 실무 최적화 방법까지 자세히 알아보겠습니다.
Docker Buildx Build –cache-from이란 무엇인가?
--cache-from은 기존에 저장된 Docker Build Cache를 가져오는 옵션입니다.
기본 형식:
docker buildx build \
--cache-from CACHE_SOURCE .
빌드 과정:
기존 Cache
↓
Buildx Cache 확인
↓
재사용 가능한 Layer 적용
↓
빠른 이미지 빌드
이미 생성된 Layer를 다시 사용하여 빌드 시간을 단축합니다.
Docker Build Cache란 무엇인가?
Docker 이미지는 여러 Layer로 구성됩니다.
예:
FROM ubuntu
RUN apt update
COPY app .
RUN npm install
빌드 과정:
Layer 1
↓
Layer 2
↓
Layer 3
↓
Layer 4
변경되지 않은 Layer는 Cache를 재사용할 수 있습니다.
Docker Buildx Build –cache-from은 언제 사용하는가?
다음 환경에서 많이 사용합니다.
- CI/CD 빌드
- 대규모 프로젝트
- 반복 배포
- Docker 이미지 최적화
- 빌드 시간 단축
특히 GitHub Actions, GitLab CI 같은 자동화 환경에서 효과적입니다.
Docker Buildx Build –cache-from 기본 사용법
가장 기본적인 형태:
docker buildx build \
--cache-from type=local,src=/tmp/cache \
-t app:v1 .
로컬 폴더에 저장된 Cache를 가져옵니다.
Registry Cache 가져오기
운영 환경에서는 Registry Cache를 많이 사용합니다.
예:
docker buildx build \
--cache-from type=registry,ref=company/app:cache \
-t company/app:v1 .
Docker Registry에 저장된 Cache Layer를 사용합니다.
Local Cache 가져오기
로컬 Cache 사용:
docker buildx build \
--cache-from type=local,src=./cache \
-t app:v1 .
개발 환경 테스트에서 유용합니다.
Docker Buildx Cache 유형
주요 Cache 방식:
| 유형 | 설명 |
|---|---|
| registry | Docker Registry 저장 |
| local | 로컬 디렉터리 저장 |
| inline | 이미지 내부 저장 |
| gha | GitHub Actions Cache |
Docker Buildx Build –cache-from과 –cache-to 관계
Cache는 보통 두 옵션을 함께 사용합니다.
–cache-to
Cache 저장:
--cache-to type=registry,ref=app:cache
–cache-from
Cache 가져오기:
--cache-from type=registry,ref=app:cache
구조:
첫 번째 빌드
↓
Cache 저장 (--cache-to)
↓
다음 빌드
↓
Cache 사용 (--cache-from)
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 활용 예제
CI 환경:
- name: Build Docker Image
run: |
docker buildx build \
--cache-from type=gha \
--cache-to type=gha \
-t app:v1 .
GitHub Actions Cache를 활용할 수 있습니다.
Linux 서버 문제 해결
CI/CD 서버에서 Docker 이미지 빌드 시간이 너무 오래 걸렸습니다.
기존:
docker buildx build \
-t company/app:v1 .
빌드 시간:
20분
확인 결과 매번 모든 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 .
변경 후:
5분
기존 Layer를 재사용하여 빌드 시간이 크게 감소했습니다.
Docker Buildx Build –cache-from은 반복 빌드 환경에서 가장 효과적인 최적화 기능 중 하나입니다.
Docker Buildx Build –cache-from 사용 시 주의사항
첫 번째는 Cache가 먼저 생성되어 있어야 합니다.
두 번째는 Cache Tag 관리가 필요합니다.
세 번째는 오래된 Cache 사용으로 예상하지 못한 빌드 결과가 발생할 수 있습니다.
네 번째는 운영 환경에서는 Registry Cache 사용을 권장합니다.
Best Practice
Docker Buildx Build –cache-from 활용 방법:
- CI/CD에서는 Registry Cache 사용
- –cache-to와 함께 구성
- Cache Tag를 별도로 관리
- 정기적으로 오래된 Cache 정리
- 빌드 시간을 측정하여 효과 확인
- 중요한 배포에서는 Cache 검증
자주 묻는 질문
Docker Buildx Build –cache-from은 무엇인가요?
기존 빌드 Cache를 가져와 재사용하는 옵션입니다.
Cache를 사용하면 왜 빨라지나요?
변경되지 않은 Docker Layer를 다시 빌드하지 않기 때문입니다.
–cache-from만 사용하면 되나요?
일반적으로 Cache 생성용 --cache-to와 함께 사용합니다.
CI/CD에서 가장 좋은 Cache 방식은 무엇인가요?
일반적으로 Registry Cache 또는 GitHub Actions Cache를 많이 사용합니다.
마무리
Docker Buildx Build –cache-from은 Docker 이미지 빌드 시간을 줄이는 핵심 기능입니다.
기존에 생성된 Layer Cache를 재사용하여 반복적인 빌드 작업을 빠르게 처리할 수 있으며, CI/CD 환경에서는 빌드 비용과 배포 시간을 크게 줄일 수 있습니다.
특히 --cache-from과 --cache-to를 함께 구성하면 안정적인 Docker 이미지 빌드 자동화 환경을 구축할 수 있습니다.