피드로 돌아가기
Dev.toDevOps
원문 읽기
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.
AI 요약
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에 개발 도구 및 소스 코드가 포함되지 않았는지 최종 레이어 검증