Google แนะ 7 Best Practice สำหรับการสร้าง Container

เมื่อ Container และ Kubernetes ได้รับความนิยมมากขึ้นเรื่อยๆ ทาง Google เองก็ได้ออกมาแนะนำถึงหลัก 7 ประการในการสร้าง Container ให้ดี ซึ่งทางทีมงาน TechTalkThai เห็นว่าเป็นเนื้อหาที่เป็นประโยชน์ จึงนำมาสรุปเป็นภาษาไทยให้อ่านกันได้ง่ายๆ ดังนี้ครับ

 

1. มี 1 Application ต่อ 1 Container เท่านั้น

ใน Container หนึ่งๆ นั้นควรจะมี Application เดียวที่มี Parent Process ร่วมกันเท่านั้น ตัวอย่างเช่น ไม่ควรใช้งานทั้ง PHP และ MySQL ใน Container เดียวกัน เพราะจะทำให้แก้ปัญหาได้ยาก, ไม่สามารถจัดการ Linux Signal สได้ดี และไม่สามารถ Scale ระบบเฉพาะส่วนได้

Credit: Google

 

2. จัดการกับ PID 1, Signal Handling และ Zombie Process ให้ดี

Kubernetes และ Docker นั้นอาศัยการส่ง Signal เข้าไปเพื่อหยุดการทำงานของ Application ใน Container โดย Signal ดังกล่าวจะถูกส่งไปยัง Process ที่มี PID 1 ดังนั้นหากต้องการให้ Application หยุดการทำงานได้ทันทีที่ต้องการ ก็ต้องออกแบบ Container ให้สามารถรับ Signal เหล่านี้ให้ได้ดีๆ

 

3. ใช้ Docker Build Cache ให้มีประสิทธิภาพ

Docker นั้นสามารถทำการ Cache ข้อมูลใน Layer ต่างๆ ภายใน Image เพื่อช่วยให้การ Build ภายหลังทำได้เร็วขึ้น แต่การจะใช้ความสามารถนี้ก็จำเป็นต้องมีความรู้ความเข้าใจในการเขียน Dockerfile อยู่บ้าง เช่น การใส่ Source Code ของเราลงไปนั้นควรใส่เป็นบรรทัดท้ายๆ เท่าที่จะทำได้ เพื่อให้ Base Image และ Dependency ต่างๆ ถูก Cache ให้มากที่สุด เป็นต้น

 

4. เอาเครื่องมือที่ไม่จำเป็นออกไปจาก Image

การลดความเสี่ยงที่อาจทำให้ Host ถูกโจมตีให้เหลือน้อยที่สุดนั้นเป็นสิ่งที่ควรทำเป็นอย่างยิ่ง ดังนั้นจึงควรกำจัดสิ่งที่ Application ของเราไม่ได้ใช้ออกไปจาก Container ให้มากที่สุด หรือจะใช้ Distroless (https://github.com/GoogleContainerTools/distroless) ซึ่งเป็น Image เปล่าๆ ที่ไม่มี Package Manager, Shell หรือโปรแกรมอื่นๆ อยู่เลยในการสร้าง Image ก็ได้เช่นกัน และทาง Google ก็แนะนำให้กำหนดค่า Filesystem ให้เป็นแบบ Read-only เท่านั้น เพื่อให้ปลอดภัยสูงสุด

 

5. สร้าง Image ให้เล็กที่สุดเท่าที่จะเป็นไปได้

การทำ Image ให้มีขนาดเล็กนั้นนอกจากจะประหยัดพื้นที่แล้ว จะยังช่วยลดเวลาที่ต้องใช้ในการ Download Image ลง และยังลดเวลาในการบูทให้น้อยลงอีกด้วย

Credit: Google

 

6. ทำการ Tag Image ที่ใช้ให้เรียบร้อย

การ Tag นั้นจะทำให้ผู้ใช้งานสามารถเลือกใช้ Image ในรุ่นที่ต้องการได้ง่าย ซึ่งไม่ว่าจะใช้การ Tag แบบ Semantic Versioning หรือ Git Commit Hash ก็ตาม ก็ควรที่จะต้องเขียนลงเอกสารให้ชัดเจนพร้อมคำอธิบายเพื่อให้ผู้ใช้งานเลือกใช้งาน Image ได้ถูกรุ่น ที่สำคัญคือ Image รุ่นใดที่ถูก Tag แล้วต้องไม่มีการถูกแก้ไขภายใน Tag เดิมอีก เพื่อไม่ให้ผู้ใช้งานสับสน

 

7. พิจารณาให้ดีก่อนจะเลือกใช้ Public Image ใดๆ

ถึงแม้การใช้ Public Image จะทำให้ง่ายต่อการทำงานในหลายๆ ครั้ง แต่ Public Image เองก็อาจไม่ได้ถูกปรับแต่งมาให้ใช้ทรัพยากรน้อยหรือปลอดภัยก็เป็นได้ ดังนั้นการสร้าง Image เองสำหรับทุกๆ ส่วนของระบบ Software เองก็จะช่วยให้มั่นใจในประเด็นเหล่านี้ได้ดีขึ้น อย่างไรก็ดี ต้องเลือกให้ดีว่ากรณีไหนควรจะใช้ Public Image และกรณีไหนควรจะสร้าง Image เอง

 

ผู้ที่สนใจรายละเอียดเชิงลึก สามารถอ่านเนื้อหาฉบับเต็มได้ที่ https://cloudplatform.googleblog.com/2018/07/7-best-practices-for-building-containers.html ครับ

from:https://www.techtalkthai.com/7-best-practices-for-building-container-by-google/

Advertisements