Docker 이미지 크기 추적 CLI 도구, Git 히스토리로 언제 늘었는지 되돌아보기
# 📌 서론 – “왜 내 Docker 이미지가 갑자기 커졌을까?”
프로젝트를 진행하다 보면 Docker 이미지 크기가 어느 순간 급격히 늘어나는 상황을 마주합니다.
배포 시간이 늘어나고,
CI/CD 파이프라인이 지연되고,
심지어 서버 비용까지 증가하죠.
하지만 문제의 원인을 찾기가 쉽지는 않습니다.
커밋 히스토리를 뒤돌아보면 어느 시점에 어떤 레이어가 추가됐는지 알 수 있지만, 직접 빌드해 보지 않으면 이미지 크기의 변화를 정확히 파악하기 어렵습니다.
이런 고민을 해결하기 위해 만든 것이 바로 Docker Time Machine – Git 히스토리를 순회하면서 각 커밋 시점의 이미지를 자동으로 빌드하고, 그 크기를 한 눈에 보여주는 CLI 도구입니다.
# 1️⃣ Docker Time Machine이란?
CLI 기반으로 작동해 별도의 UI 없이 터미널만 있으면 바로 사용 가능
지정한 Git 브랜치 혹은 커밋 범위를 순회하면서
docker build를 수행각 커밋 별 이미지 레이어 크기와 전체 이미지 용량을 표 형태로 출력
가장 크게 변한 커밋을 색상으로 강조해 한눈에 파악 가능
즉, “내 이미지가 언제, 왜 커졌는가?” 라는 질문에 시계 역행처럼 답을 찾아주는 도구입니다.
# 2️⃣ 설치 및 기본 사용법
# 2.1 사전 준비
| 항목 | 요구 사항 |
|------|-----------|
| Docker | 최신 버전 설치 (Docker Engine) |
| Git | 로컬 저장소가 존재해야 함 |
| Python (optional) | pip 로 설치할 경우 필요 |
# 2.2 설치 방법
bash
# Homebrew (macOS, Linux) 사용 시
brew install docker-time-machine
# pip 로 설치 (Python 환경)
pip install docker-time-machine
# 2.3 기본 명령어
bash
# 현재 브랜치 전체 히스토리 조회
docker-time-machine
# 특정 브랜치와 커밋 범위 지정
docker-time-machine --branch develop --since v1.2.0 --until HEAD
출력 예시:
Commit Image Size Δ Size Build Time
------------------------------------------------
a1b2c3d 320 MB +0 MB 1m23s
d4e5f6g 415 MB +95 MB 1m45s <-- 급증!
h7i8j9k 410 MB -5 MB 1m30s
위와 같이 Δ Size(증감량) 컬럼을 통해 어느 커밋에서 이미지가 급증했는지 즉시 확인할 수 있습니다.
# 3️⃣ 결과 해석 – 이미지 급증 원인 찾기
# 3.1 레이어별 상세 분석
docker-time-machine --detail <commit> 명령을 사용하면 해당 커밋의 Dockerfile 레이어별 크기를 확인할 수 있습니다.
bash
docker-time-machine --detail d4e5f6g
출력 예시:
Layer 1: FROM python:3.9-slim 120 MB
Layer 2: RUN apt-get update && apt-get install -y build-essential 80 MB
Layer 3: COPY . /app 200 MB <-- 대용량 파일 추가
...
# 3.2 흔히 발생하는 이미지 급증 원인
| 원인 | 설명 | 해결 팁 |
|------|------|--------|
| 불필요한 파일 복사 | COPY . 로 전체 프로젝트를 복사 | .dockerignore에 빌드 아티팩트 제외 |
| 대용량 베이스 이미지 | FROM ubuntu 등 | alpine 혹은 slim 버전 사용 |
| 중복 레이어 | 동일 패키지를 여러 RUN 에서 설치 | && 로 하나의 레이어에 합치기 |
| 캐시 무시 옵션 | --no-cache 사용 시 매번 새 레이어 생성 | 필요할 때만 사용 |
Docker Time Machine을 활용하면 어떤 레이어가 문제인지 바로 파악할 수 있어, 불필요한 용량을 빠르게 제거할 수 있습니다.
# 4️⃣ 실전 활용 팁 – CI/CD 파이프라인에 통합하기
- CI 스크립트에 추가
yaml
steps:
- name: Check Docker image size history
run: docker-time-machine --branch $CI_COMMIT_BRANCH --since $CI_COMMIT_SHA~10
최신 10개 커밋에 대한 이미지 변화를 자동으로 체크하면, PR 단계에서 용량 급증을 사전에 차단할 수 있습니다.
알림 연동
이미지 급증이 감지되면 Slack 혹은 Teams 로 알림을 전송하도록 스크립트를 작성하면 팀 전체가 즉시 인지합니다.
자동 최적화 레포트
--report옵션을 사용해 CSV 혹은 JSON 형태로 결과를 저장하고, 정기적으로 용량 추세를 시각화하면 장기적인 Docker 이미지 최적화 전략을 수립할 수 있습니다.
# 5️⃣ 베스트 프랙티스 – Docker 이미지 관리의 기본 원칙
.dockerignore를 철저히 관리해 불필요한 파일 복사를 차단멀티스테이지 빌드 로 빌드 환경과 실행 환경을 분리
이미지 레이어 정리 :
apt-get clean && rm -rf /var/lib/apt/lists/*이미지 스캔 :
docker scan으로 보안 취약점 및 불필요 레이어 확인
Docker Time Machine은 이러한 베스트 프랙티스를 적용했는지 지속적으로 검증해 주는 역할을 합니다.
# 📣 결론 – 지금 바로 Docker 이미지 크기 히스토리를 들여다보세요!
이미지 용량 급증은 프로젝트 비용과 배포 속도를 크게 좌우합니다.
Docker Time Machine이라는 CLI 도구를 활용하면 Git 히스토리를 타임머신처럼 거슬러 올라가, 언제, 왜 이미지가 커졌는지 정확히 파악할 수 있습니다.
1️⃣ 오늘 바로 설치하고, docker-time-machine 명령을 실행해 보세요.
2️⃣ CI 파이프라인에 통합해 자동으로 용량 변화를 모니터링하세요.
3️⃣ 발견된 문제를 바탕으로 Dockerfile을 최적화해, 가볍고 빠른 컨테이너 이미지를 유지하세요.
Docker 이미지 최적화는 이제 선택이 아니라 필수입니다.
지금 바로 Docker Time Machine을 사용해, 불필요한 용량을 줄이고 효율적인 개발 환경을 만들어 보세요! 🚀
Comments
Join the discussionNo comments yet. Be the first to comment.