Docker image를 최적화하는 것은 크기를 줄이고(더 작고, 더 빠르고, 더 안전함) 빌드 성능을 개선하는 것(캐싱을 통한 더 빠른 빌드)을 수반합니다. 기법에는 최소한의 base image, multi-stage build, layer 최적화, BuildKit, 신중한 Dockerfile 설계가 포함됩니다.
image 크기 줄이기
✓ 최소한의 base image:
- alpine(작음, ~5MB) — 그러나 musl libc가 일부 앱에 호환성 문제를 야기할 수 있음
- slim 변형(예: python:3.12-slim) — full보다 작고, 호환성 문제 적음
- DISTROLESS — 앱 + 런타임만, 셸/패키지 매니저 없음(가장 작고, 가장 안전함)
- scratch — 빈 base(정적 바이너리용, 예: Go) → 최소한의 image
✓ MULTI-STAGE build — 도구로 빌드하고, 산출물만 출하(큰 크기 절약)
✓ RUN layer 결합 + 같은 layer에서 정리:
RUN apt-get update && apt-get install -y x && rm -rf /var/lib/apt/lists/*
(별도 layer에서 정리는 image를 줄이지 않음 — 파일이 이전 layer에 있음)
✓ .dockerignore — 쓸데없는 것을 컨텍스트/image 밖에 유지
✓ 프로덕션 image에서 캐시, 임시 파일, 개발 의존성 제거
