multi-stage-builds

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를 생성할 수 있다.
    • compiled lang
      • stage1에서 compile를 진행하고 컴파일된 이진 파일을 복사하여 compiler를 제외한 가벼운 image를 생성할 수 있다.