피드로 돌아가기
Optimicé una imagen Docker de 1.58GB a 186MB. Y rompí el hot reload sin que nadie me lo dijera por dos días.
Dev.toDev.to
DevOps

Docker 이미지 88% 최적화 및 Multi-stage 빌드 시 Hot Reload 손실 해결

Optimicé una imagen Docker de 1.58GB a 186MB. Y rompí el hot reload sin que nadie me lo dijera por dos días.

Juan Torchia2026년 4월 15일9intermediate

Context

Node.js/TypeScript 기반 앱의 Single-stage 빌드 구조로 인한 이미지 비대화 발생. devDependencies 포함 및 불필요한 빌드 도구 잔존으로 1.58GB의 고용량 이미지가 생성되는 한계 직면.

Technical Solution

  • Multi-stage Build 도입을 통한 Build-time과 Runtime 환경의 물리적 분리
  • Alpine Linux 기반 이미지 채택으로 베이스 이미지 경량화 달성
  • Production Stage에서 npm ci --only=production 및 Cache Clean을 통한 런타임 의존성 최소화
  • .dockerignore 설정을 통한 소스 코드 및 빌드 아티팩트의 컨테이너 유입 차단
  • Docker Compose의 target 옵션 명시를 통해 개발 환경에서 builder 스테이지를 명시적으로 참조하도록 수정
  • 환경별 전용 Dockerfile(Dockerfile.dev, Dockerfile) 분리로 설정 모호성 제거 및 개발 생산성 확보

- Multi-stage Build 적용 시 Docker Compose의 `target` 설정이 개발 환경 의존성과 일치하는지 확인 - 개발용과 운영용 Dockerfile을 물리적으로 분리하여 설정 오류 가능성 차단 - 최적화 후 소스 코드 수정 시 실시간 반영 여부를 확인하는 통합 테스트 수행 - Production Stage에 개발 도구 및 소스 코드가 포함되지 않았는지 최종 레이어 검증

원문 읽기