# 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 파이프라인에 통합하기

1. **CI 스크립트에 추가**

   
```
yaml

   steps:

     - name: Check Docker image size history

       run: docker-time-machine --branch $CI_COMMIT_BRANCH --since $CI_COMMIT_SHA~10

   
```

   최신 10개 커밋에 대한 이미지 변화를 자동으로 체크하면, PR 단계에서 용량 급증을 사전에 차단할 수 있습니다.

2. **알림 연동**

   이미지 급증이 감지되면 Slack 혹은 Teams 로 알림을 전송하도록 스크립트를 작성하면 팀 전체가 즉시 인지합니다.

3. **자동 최적화 레포트**

   `--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을 사용해, 불필요한 용량을 줄이고 효율적인 개발 환경을 만들어 보세요! 🚀
