Docker Build

NestJS 이미지는 빌드 단계와 실행 단계를 분리한다

멀티스테이지 Dockerfile은 개발 의존성, 빌드 산출물, 런타임 의존성을 서로 다른 경계에 두어 이미지 크기와 운영 위험을 줄인다.

builder 개발 의존성 + 컴파일

npm ci 후 TypeScript를 dist로 컴파일한다.

deps 운영 의존성만 추림

npm ci --omit=dev로 실행 패키지만 남긴다.

runtime 최소 실행 이미지

dist, package.json, prod node_modules만 복사한다.

대상
역할
운영에서 확인할 것
Image
읽기 전용 실행 템플릿
digest, tag, 빌드 산출물 버전
Container
이미지를 실행한 인스턴스
환경 변수, 포트, 헬스체크
Registry
이미지 저장소
권한, 취약점 스캔, 배포 기준
캐시 핵심은 package*.json을 먼저 복사하는 것이다. 의존성 레이어가 소스 변경과 분리되면 작은 코드 수정 때마다 전체 설치를 반복하지 않는다.