팀 리드에게서 Slack DM이 왔습니다.
"CI 빌드가 12분 걸리고 있어요. ECR에 푸시하는 이미지가 1.2GB인데, 이거 뭔가 잘못된 거 아닌가요?"
확인해보니 Dockerfile 첫 줄이 `FROM node:latest`입니다.
`node_modules`가 통째로 COPY되고 있고, `.git` 디렉토리도 빌드 컨텍스트에 포함돼 있습니다.
TypeScript 컴파일러와 테스트 도구까지 최종 이미지에 남아 있습니다.
이 Lab에서는 Dockerfile을 단계적으로 뜯어고칩니다.
먼저 docker history로 문제를 진단하고, .dockerignore로 빌드 컨텍스트를 줄이고,
멀티스테이지 빌드로 빌드 환경과 실행 환경을 분리하고,
마지막으로 레이어 캐시 순서를 최적화해 npm install이 캐시되도록 만듭니다.