Multi-stage build
기존 build를 사용하면, 의존성 다운로드, 코드 컴파일링, 애플리케이션 패키징 등의 빌드 명령어가 하나의 build container에서 실행된다. 즉 gradle은 빌드 할 때만 필요한데, 실행 container까지고 gradle에 대한 의존성이 남아있는 것이다. 이 문제를 해결하는 것이 Multi-stage build이다.
Multi-stage build는 Dockerfile을 여러 stage로 나눈다. 빌드 환경과 런타임 환경을 분리하여 이미지의 크기과 security 위험도를 낮춘다.
- Multi-stage의 이점
- interpreted lang
- stage1에서 code를 전처리를 한다. stage2에서 production-ready file를
COPY로 가져와서 작은 image를 생성할 수 있다.
- stage1에서 code를 전처리를 한다. stage2에서 production-ready file를
- compiled lang
- stage1에서 compile를 진행하고 컴파일된 이진 파일을 복사하여 compiler를 제외한 가벼운 image를 생성할 수 있다.
- interpreted lang