Multi-stage คือ
เทคนิคที่ช่วยให้เราสามารถ optimize ระยะเวลาในการ build image ซ้ำ แทนที่เราจะ มา build image ใหม่ทุกครั้ง ก็เปลี่ยนมาใช้การ copy image ที่เคย build ไปแล้วมาใช้กับ stage ใหม่แทน
Note: Multi-Stage สามารถใช้งานได้กับ Docker edge version เวอร์ชั่น v17.05.0ce ขึ้นไป
หากเปรียบเทียบกับความเป็นจริง Multi-Stage ก็คล้ายกับแก้วใบหนึ่งที่เป็นเหมือน blue print(พิมพ์เขียว) ให้เราสามารถนำมา Reuse ได้ แทนจะเราจะผลิตแก้วกระดาษที่ซ้ำทุกครั้ง
ลองกันเลย 🚩
เริ่มต้นด้วยการสร้าง Dockerfile สำหรับ dev และDockerfile สำหรับ production
หลังจากนั้นลองสั่ง build ทั้งสอง images โดยใช้คำสั่ง
docker build -t demo-dev -f Dockerfile-dev .
docker build -t demo-prod -f Dockerfile-production .
โดยผลลัพธ์ที่ได้คือ
| Docker Tags | Size |
|-----------------|--------|
| demo-dev | 994MB |
| demo-prod | 996MB |
| Summary | 1.99GB |
หลังจากนั้นเราลองมาใช้ Multi-Stage กันบ้าง ✨
ลองสั่ง build images โดยใช้คำสั่ง
docker build -t demo-multi-stage -f Dockerfile-muti-stage .
โดยผลลัพธ์ที่ได้คือ
| Docker Tags | Size |
|------------------|--------|
| demo-multi-stage | 1.01GB |
จะเห็นได้ว่าขนาด image ที่ถูก build ลดลงไปถึง 0.98 GB 🎉
โดยวิธีการ เขียน docker multi-stage ง่ายมาก เพียงแค่ใช้คำสั่ง
copy --from=<index stage or stage name> <destination path> <original path>
Summary
Muti stage เป็นอีกหนึ่งวิธีที่จะช่วยเพิ่มทางเลือกให้กับคุณในการ ลดขนาดของ image ที่จะช่วยให้ image ของคุณ lean ขึ้นและยังช่วยลดระยะเวลาในการ build image ได้อีกด้วย
Ref:
Top comments (1)
Coooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooool