Learning
토픽 22 / 107·가상화와 컨테이너

Dockerfile / 멀티스테이지 빌드

Dockerfile / 멀티스테이지 빌드

Dockerfile은 컨테이너 이미지 빌드를 자동화하는 텍스트 기반 명세 파일이고, 멀티스테이지 빌드는 여러 FROM 단계를 사용하여 빌드 환경과 실행 환경을 분리함으로써 최종 이미지 크기를 최소화하는 기법

멀티스테이지 빌드: 여러 FROM 스테이지 사용, 빌드 스테이지(컴파일러/빌드도구 포함) → 실행 스테이지(런타임만 포함/COPY --from=build), 최종 이미지에 빌드 도구 미포함으로 크기 대폭 감소(예: 1GB→50MB)

레이어 캐싱 최적화: 변경 빈도 낮은 명령 먼저 배치(종속성 설치 → 소스코드 복사), 캐시 무효화 범위 최소화, .dockerignore로 불필요 파일 제외(node_modules/.git), RUN 명령 결합(레이어 수 감소)

보안 모범사례: 최소 베이스(alpine 5MB/distroless), root 실행 금지(USER non-root), COPY 우선 사용(ADD는 URL/tar 자동 해제로 위험), 비밀정보 빌드 인자 금지(BuildKit --secret 사용), 멀티스테이지로 빌드 도구 제거

비교: Dockerfile(명시적 명령어/세밀 제어/학습 필요/표준) vs Buildpack(자동 감지/추상화/간편/Heroku·Cloud Foundry) vs Jib(Java 전용/Docker 데몬 불필요/Maven·Gradle 통합)

연관: Docker, 컨테이너 이미지, 레이어 캐싱, CI/CD, 보안