노드 백엔드를 도커로 말아서 배포하는데 이미지 빌드하고 나면 용량이 1.5기가가 넘어요. 배포할 때마다 이거 올렸다 내렸다 하니까 느리기도 하고 저장소 용량도 아깝고 해서 좀 줄이고 싶어요. 근데 제 도커파일이 뭐가 문제인지 잘 모르겠어요.


지금 대충 이런 식으로 쓰고 있거든요.


FROM node:20
COPY . .
RUN npm install
RUN npm run build
CMD ["node", "dist/index.js"]


찾아보니까 베이스 이미지를 alpine 쓰면 줄어든다는 말도 있고, 멀티스테이지 빌드라는걸 하면 빌드할 때 쓴 도구들은 최종 이미지에 안 들어가서 확 줄어든다는 얘기도 봤어요. 근데 멀티스테이지가 정확히 어떻게 동작하는건지 이해가 잘 안돼요. 스테이지를 나눈다는게 무슨 의미인지.


그리고 레이어 캐시라는것도 있던데, COPY 순서를 바꾸면 빌드가 빨라진다는게 무슨 원리인지도 궁금해요. package.json을 먼저 복사하라는 말을 봤는데 왜 그래야 하는지 모르겠어요. 이미지 줄이는거랑 빌드 빨라지는거 둘 다 잡고 싶은데 조언 부탁드립니다.