M3 맥북에서 Node 20 + Express + Prisma 백엔드를 Dockerize했는데 이미지가 5.2GB가 됩니다. 인텔 맥에서 비슷한 프로젝트는 1.5GB 정도였던 것 같은데, ARM64라서 그런 건가요?
# Dockerfile
FROM node:20
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]M3 맥북에서 Node 20 + Express + Prisma 백엔드를 Dockerize했는데 이미지가 5.2GB가 됩니다. 인텔 맥에서 비슷한 프로젝트는 1.5GB 정도였던 것 같은데, ARM64라서 그런 건가요?
# Dockerfile
FROM node:20
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]
댓글 3
플랫폼이 아니라 Dockerfile 자체가 문제입니다.
node:20풀 이미지(약 1GB) + 전체 소스 + dev dependencies + 캐시까지 다 들어가서 5GB가 됐을 겁니다. 200MB까지 줄일 수 있어요.최적화된 Dockerfile (멀티스테이지)
이것만 해도 1.5GB → 350MB 정도로 줄어듭니다.
더 줄이려면 — distroless
distroless는 sh조차 없어서 200MB대까지 떨어집니다. 보안도 같이 좋아짐(공격 표면 최소).
.dockerignore 필수
이거 없이
COPY . .하면 .git이나 .next 캐시까지 다 들어갑니다.distroless의 정상적인 트레이드오프입니다. 디버깅 방법은 4가지:
1) ephemeral debug container (K8s 1.25+)
2) debug 이미지 분리
3) sidecar 컨테이너
4) 로그 + APM 강화 (가장 권장)
SSH·docker exec으로 들어가서 디버깅하는 패턴 자체를 줄이는 게 정답입니다. structured logging + Sentry + OpenTelemetry로 미리 다 보이게 만들어두면 컨테이너에 안 들어가도 됩니다.