Docker 멀티스테이지 빌드로 이미지 줄이기
작업 절차 / docker-multistage.html
빌드 도구와 실행에 필요한 것만 남겨 이미지 크기를 크게 줄이는 절차입니다.
💬 빌드용 이미지와 실행용 이미지를 나누면 최종 이미지가 가벼워집니다.
실행 순서
- 빌드 단계에서 의존성 설치와 컴파일을 합니다.
- 실행 단계에는 결과물과 런타임만 복사합니다.
Dockerfile 예시
# 1단계: 빌드
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# 2단계: 실행
FROM node:20-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=build /app/dist ./dist
COPY package*.json ./
RUN npm ci --omit=dev
CMD ["node", "dist/server.js"]
빌드와 확인
docker build -t myapp .
docker images myapp # 크기 비교
docker run --rm -p 3000:3000 myapp
오류 발생 시 대응
- 파일을 못 찾음:
COPY --from=build경로가 빌드 단계 결과와 맞는지 확인하세요. - .dockerignore 누락: node_modules를 이미지에 복사하면 커지고 느려집니다.
출처
- 공식 문서 Multi-stage builds — 공식 문서
- GitHub nodejs/docker-node — 공식 Node 이미지
검증일은 자료의 최신성을 나타냅니다. 오래된 자료는 적용 조건을 확인하세요.