ปัจจุบัน ทุกอุตสาหกรรมมีความเห็นตรงกันว่า แอพพลิเคชั่นกลายเป็นศูนย์กลางของธุรกิจทุกรูปแบบ เกิดการแข่งขันภายในตลาดเพื่อพัฒนาแอพพลิเคชั่นให้รองรับการอัพเดทตามความต้องการของลูกค้าตลอดเวลา นอกจากทีมdeveloper ที่ต้องพัฒนาแอพพลิเคชั่นเป็นจำนวนมากขึ้นกว่าเมื่อก่อน ทีม operation เองก็มีระบบที่มีขนาดใหญ่และซับซ้อนกว่าเดิมที่ต้องดูแล ด้วยทรัพยากรที่มีอยู่อย่างจำกัด จึงต้องมีการจัดการทรัพยากรเหล่านั้นให้เกิดประสิทธิภาพสูงสุด ตอบสนองต่อจำนวนผู้ใช้งานแอพพลิเคชั่นในทุกสถานการณ์ ดังนั้นองค์กรจำนวนมากจึงมีการนำเทคโนโลยี container เข้ามาใช้งานภายในระบบ เพื่อการทำงานที่มีมาตรฐานคงที่ ความเร็วในการเพิ่มลดเครื่อง และความมั่นคงปลอดภัยระหว่างเครื่อง
Container คืออะไร
Container คือการจัดเก็บแอพพลิเคชั่นให้อยู่ในรูปแบบที่ง่ายต่อการโยกย้ายและนำขึ้นระบบ (deploy) โดยประกอบไปด้วยตัวแอพพลิเคชั่นเอง library หรือ binary ต่าง ๆที่จำเป็นในการรันแอพพลิเคชั่นนั้น ๆ และการกำหนดค่าต่าง ๆของแอพพลิเคชั่นนั้น ๆ เพราะฉะนั้นไม่ว่าจะย้ายตัวแอพพลิเคชั่นที่ถูกจัดเก็บเป็น container ไปรันที่ไหน จะสามารถทำงานได้เหมือนเดิมโดยไม่คำนึงถึงระบบปฏิบัติการ
ภายในหนึ่ง container สามารถรันแอพพลิเคชั่นทั้งตัว หรือ service หากเราแบ่งแบบ microservice ก็ได้แอพพลิเคชั่นในรูปแบบ container จะถูกรันผ่าน software ที่เรียกว่า container engine/runtime โดยตัวอย่างหนึ่งที่หลายๆท่านอาจจะคุ้นเคยคือ docker หรือ containerd เป็นต้น
Container vs VM
ความแตกต่างระหว่าง container กับ virtual machine(vm) ที่ชัดเจนที่สุดคือ ทุก VM มีระบบปฏิบัติการ(os) แบบเต็มหรือบางส่วนอยู่ภายใน ในขณะเดียวกัน container หลายๆตัวทำงานอยู่บน os เดียวกันร่วมกัน ข้อดีของ container คือความเบา ง่ายต่อการโยกย้าย สามารถรันได้ในตัวมันเองไม่ขึ้นกับปัจจัยใด และเนื่องจาก container สามารถรันอยู่ภายใน vm ได้ ผู้ใช้สามารถใช้ประโยชน์ของทั้งคู่ได้พร้อม ๆกัน การรัน container หลายๆตัว บน vm นั้นเพิ่มความมั่นคงปลอดภัยขึ้น การใช้ vm จะเป็นเสมือนกำแพงใน infrastructure layer ทำให้เกิดการแบ่งแยกกันระหว่าง container ที่ชัดเจนขึ้นเมื่อเราต้องการ
ทำไมต้อง container ?
แอพพลิเคชั่นที่ถูกออกแบบด้วย monolith architecture จะทำให้ธุรกิจของคุณออกสู่ตลาดช้าลง แอพพลิเคชั่นสมัยใหม่ถูกสร้างและนำขึ้นระบบบน container เพื่อความรวดเร็วในการนำแอพพลิเคชั่นขึ้นระบบและทำให้การทำงานมีความต่อเนื่องและเป็นไปในทิศทางเดียวกันตลอดทั้งระบบ ข้อดีเหล่านี้ดึงดูดบริษัทและองค์กรทั้งเล็กและใหญ่ให้ใช้งานเทคโนโลยี container
เทคโนโลยี container มีประโยชน์ดังนี้
- การนำแอพพลิเคชั่นขึ้นระบบที่คงที่ ลดเวลาในการนำขึ้น (Consistent Deployment)
การส่งต่อแอพพลิเคชั่นและ environment จากทีมผู้พัฒนาให้ทีมผู้ดูแลระบบไปขึ้นระบบเป็นขั้นตอนที่ยุ่งยากและใช้เวลาสูง การจัดเก็บทุกอย่างไว้ด้วยกันทำให้เกิดความคงที่ตลอดทั้งวงจรการพัฒนา ลดเวลาและปัญหาในการนำแอพพลิเคชั่นขึ้นระบบเพื่อให้ผู้ใช้ในตลาดใช้งาน ความผิดพลาดจากการส่งต่องานเองก็ลดลง นักพัฒนาจะมีเวลามุ่งเน้นการพัฒนาแอพพลิเคชั่นเพื่อธุรกิจมากขึ้น
- การอัพเดทเพื่อให้รองรับความต้องการลูกค้า หรือมาตรฐานความปลอดภัยสามารถทำได้ง่ายขึ้น
Container มีระบบสามารถถูกอัพเดท เพิ่ม และ ลด ได้อย่างรวดเร็วและง่าย ขั้นตอนการอัพเดทเองสามารถทำได้อย่างอัตโนมัติ เมื่อมีความต้องการใหม่ๆ หรือการเพิ่มมาตรฐานความปลอดภัยของแอพพลิเคชั่น เราสามารถ อัพเดทและสร้าง container ขึ้นเป็น container image และส่งขึ้นไปบน image registry เพื่อให้ผู้ดูแลนำขึ้นระบบ
- การแบ่งแยกอย่างชัดเจนระหว่าง container
การทำงานของ container มีการแบ่งแยกอย่างชัดเจนระหว่าง container ด้วยกันเองและ ระหว่าง container กับตัวระบบ infrastructure ข้างล่างเช่นกัน เมื่อมี container ตัวใดตัวหนึ่งในระบบล่ม จะไม่มี container อื่น ๆที่ทำงานอยู่บนเครื่องเดียวกันได้รับผลกระทบ นอกเหนือจากนั้น การดูแล ควบคุม container จำนวนมากให้ทำงานตามที่ผู้ดูแลต้องการ มีการใช้เครื่องมืออย่าง container orchestration เช่น Kubernetes ที่จะเข้ามาช่วยให้ระบบที่ล่มให้ถูกแก้ไขทันที
เรียนรู้เพิ่มเติมเรื่อง container ผ่านการลงมือทำได้ที่ https://tanzu.vmware.com/developer/workshops/lab-container-basics/