Multi-stage build dùng nhiều stage FROM trong một Dockerfile — build ứng dụng trong một stage (với tất cả các công cụ build) và chỉ copy các artifact cuối cùng vào một stage cuối sạch sẽ, tối thiểu. Điều này tạo ra các image production nhỏ hơn, an toàn hơn nhiều.
Vấn đề: các công cụ build làm phình image
Build một ứng dụng cần các công cụ build (compiler, dev dependency, SDK), nhưng image
CUỐI CÙNG không nên bao gồm chúng:
→ chúng làm phình image (kích thước lớn hơn, triển khai chậm hơn)
→ chúng tăng bề mặt tấn công (nhiều phần mềm hơn = nhiều lỗ hổng hơn)
→ Bạn chỉ muốn artifact đã build + runtime của nó trong image cuối cùng.
