피드로 돌아가기
Dev.toDevOps
원문 읽기
패키지 DB-파일 매핑을 통한 Docker 이미지 레이어 용량의 정밀 분석
Which package is bloating your Docker image?
AI 요약
Context
기존 docker history는 레이어별 용량만 제공하며 dive는 인터랙티브한 파일 탐색에 의존함. 특정 레이어의 용량 증가를 유발한 구체적인 패키지 식별을 위한 자동화된 Attribution 도구의 부재함.
Technical Solution
- go-containerregistry를 활용한 Docker-save 및 OCI 레이아웃의 정규화된 파싱 구현
- 이미지 내부 패키지 DB(/lib/apk/db/installed, /var/lib/dpkg/info/*.list)와 레이어 내 추가된 파일 리스트 간의 JOIN 연산 수행
- Whiteout 마커를 제외한 파일 시스템 diff 분석을 통한 실제 증가 바이트 측정
- 패키지 DB에 매핑되지 않는 build artifacts나 COPY 파일은 개별 파일 단위로 Fallback 처리하여 분석 누락 방지
- Docker daemon 없이 tarball 직접 분석 구조를 채택하여 CI/CD 파이프라인 내 비대화성 리포트 생성 최적화
Impact
- python:3.12-slim 이미지 분석 시 137.7 MB 중 69%의 패키지 Attribution 비율 정밀 측정
- 개별 파일 단위 분석을 통해 6.3 MB 규모의 libpython3.12.so.1.0 등 비패키지 빌드 결과물 식별 가능
Key Takeaway
단순한 파일 목록 나열보다 시스템 내부의 메타데이터(Package DB)를 결합한 데이터 조인 방식이 문제의 근본 원인(Root Cause)을 빠르게 식별하는 핵심 설계 전략임.
실천 포인트
- Docker 이미지 용량 급증 시 dive의 수동 탐색 대신 layer-blame을 통한 패키지 단위 원인 분석 수행 - Multi-stage build 사용 시 COPY --from으로 인한 패키지 연결 끊김 현상을 고려한 용량 최적화 검토 - CI 단계에 layer-blame을 통합하여 PR 단계에서 이미지 크기 예산(Size Budget) 초과 여부를 자동 감지