เมื่อการติดตั้งโปรแกรมสำหรับ production ด้วย docker กลายเป็นสิ่งที่หลีกเลี่ยงไม่ได้ เนื่องด้วยแวดล้อมในการติดตั้งไม่ว่าจะต่อ internet ไม่ได้บ้าง ความต้องการของผู้ดูแลเรื่องระบบเครือข่ายบ้าง ทำให้ docker น่าจะเป็นทางออกที่ดี
การสร้าง dockerfile ในช่วงแรกๆ เรียกได้ว่า copy จากคนอื่นมาล้วนๆ เพื่อให้โปรแกรมสามารถใช้งานก่อน จากนั้นจึงค่อยๆ เรียนรู้ไป จนได้เริ่มมาได้ยินเรื่อง multi-stage ที่น่าจะช่วย optimize เรื่องขนาดของ image ให้เล็กลงได้
Few weeks later!!! ทั้งศึกษา งมแก้แบบมั่วบ้าง เข้าใจบ้าง จนท้ายที่สุดก็ได้ docker image ที่น่าพอใจ (ในตอนนี้) โดยได้นำไปทดลองใช้กับ 2 โปรเจค
การสร้าง dockerfile ในช่วงแรกๆ เรียกได้ว่า copy จากคนอื่นมาล้วนๆ เพื่อให้โปรแกรมสามารถใช้งานก่อน จากนั้นจึงค่อยๆ เรียนรู้ไป จนได้เริ่มมาได้ยินเรื่อง multi-stage ที่น่าจะช่วย optimize เรื่องขนาดของ image ให้เล็กลงได้
Few weeks later!!! ทั้งศึกษา งมแก้แบบมั่วบ้าง เข้าใจบ้าง จนท้ายที่สุดก็ได้ docker image ที่น่าพอใจ (ในตอนนี้) โดยได้นำไปทดลองใช้กับ 2 โปรเจค
- โปรเจค Ruby on Rails ขนาดเล็ก ที่ใช้เก็บข้อมูลสินค้า มีแค่ฟอร์มบันทึก แก้ไขข้อมูล และแสดงผลง่ายๆ เท่านั้น
- โปรเจค Ruby on Rails ที่ค่อนข้างใหญ่หน่อย มีการติดตั้งโปรแกรมสำหรับจัดการรูปภาพ โปรแกรมแปลงไฟล์ HTML ให้เป็น PDF ซึ่งมีไลบราลีที่เป็นเกี่ยวเนื่องกันอยู่พอสมควร
Images ก่อนทำ multi-stage
REPOSITORY TAG IMAGE ID CREATED SIZE simple_app 1.0 5c0a32ed097d 8 hours ago 1.4GB thip 3.1.1-beta-3 02400db6d8be 26 seconds ago 1.44GB
Images หลังทำ multi-stage
REPOSITORY TAG IMAGE ID CREATED SIZE simple_app 1.1 02f892cafb39 8 hours ago 868MB thip 3.1.1-beta-4 f0cf614927f5 19 minutes ago 1.18GB
สรุปผลกันหน่อย
จะเห็นได้ว่าในส่วนของโปรเจคแรกขนาดของ Image ลดลงได้ 37.85% 😲😲😲😲 และโปรเจคที่สองขนาดของ Image ลดลงได้ 18.05% 😲😲 สาเหตุที่ทำให้ขนาดของ Image ตัวนี้ลดลงได้ไม่มากนักก็น่าจะเป็นเพราะมีการติดตั้งโปรแกรม และไลบราลีต่างๆ ตามที่ได้กล่าวไว้ข้างต้น
ส่วนมาก image ของเราที่ใหญ่มาจากไลบราลีที่ใช้ในการคอมไพล์โปรแกรม หรือโปรแกรมที่จำเป็นต้องใช้งานขณะ runtime จะพูดให้ง่ายๆ ก็คือการทำ multi-stage เหมือนสร้าง image ตัวหนึ่งไว้สำหรับการคอมไพล์โปรแกรม และสร้างอีก image หนึ่งขึ้นมาเพื่อใช้สำหรับเก็บโปรแกรมที่พร้อมใช้งานจริง และมีไลบราลีที่เกี่ยวข้องที่จำเป็นเท่านั้น นั้นจึงทำให้ขนาดของ image ลดลงได้