🔍 검색 키워드: Docker 멀티스테이지, 빌드 캐시, Docker layer, Dockerfile 최적화, 빌드 성능, Docker 이미지 크기
Docker 빌드가 매번 10분씩 걸린다면 문제는 멀티스테이지 캐시 전략이다. 각 stage마다 캐시가 독립적으로 작동하는데, 우리는 보통 이걸 무시하고 작성한다.
■ 증상
docker build --no-cache -t myapp .
매번 node_modules 다시 설치 → 5분 소요
또는 코드 변경 → 전체 이미지 재빌드 → 10분 대기
■ 원인
1. 레이어 순서 잘못됨 - 변경 빈도가 높은 코드를 먼저 놓음
2. stage 간 캐시 미사용 - FROM base 후 다시 의존성 설치
3. .dockerignore 미설정 - 불필요한 파일까지 ADD → 캐시 무효화
■ 해결방법
❌ 나쁜 예:
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
✅ 좋은 예:
FROM node:18 AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:18 AS runtime
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
COPY package.json .
EXPOSE 3000
CMD ["npm", "start"]
■ .dockerignore 설정 필수:
node_modules
dist
build
.git
.env
.next
■ 최적화 체크리스트
1. 레이어 변경 빈도순 정렬 (거의 변경 안 됨→자주 변경)
2. RUN 명령어 합치기
3. npm ci 사용 (install보다 빠름)
4. 멀티스테이지로 최종 이미지 크기 50% 감소
5. BuildKit 활용으로 빌드 속도 60% 향상 가능
댓글 없음:
댓글 쓰기