เทคโนโลยี Virtualization และ Cloud Computing มีความนิยมอย่างแพร่หลาย และมีแนวโน้มการเติบโตอย่างรวดเร็ว โดยใช้ซอฟต์แวร์ประเภท Virtual Machine (VM) ซึ่งช่วยให้สามารถสร้างจำลองเครื่อง Computer ที่มี OS, Network, Disk ที่ต่างกันได้บน Server เดียวกันได้ ช่วยให้ประหยัดค่าใช้จ่ายในองค์กรได้เป็นอย่างมาก อีกทั้งช่วยให้นักพัฒนาซอฟต์แวร์สามารถทดสอบการทำงานของซอฟต์แวร์บน Environment ต่างๆ ได้อย่างสะดวกอีกด้วย
ในปัจจุบันได้มีการพัฒนาซอฟต์แวร์ต่างๆ มากมายที่สนับสนุนการทำงานแบบ VM ในลักษณะที่แตกต่างกันไป โดยมีซอฟต์แวร์เป็นที่นิยมใช้กันซึ่งจะกล่าวถึงในบทความนี้อยู่ 2 ค่าย คือ Docker และ Vagrant ซึ่งทั้งสองตัวนี้มีลักษณะการทำงานที่มีวัตถุประสงค์เดียวกัน คือ สามารถนำเอาระบบซอฟต์แวร์ หรือซอฟต์แวร์ที่พัฒนาขึ้นไปรันบนเครื่องอื่นๆ ได้โดยไม่ต้อง Config เครื่อง Server ให้ยุ่งยาก จะกล่าวถึงจุดเด่นของแต่ละตัวคร่าวๆ ดังนี้
Docker
Docker มีลักษณะการทำงานแบบ Virtual Environment (VE) ซึ่งถูกสร้างขึ้นมาบน LxC (LinuX Container) โดยการใช้ฟังก์ชันการทำงานของ cgroups (Linux Control Group) มาช่วยบริหารจัดการ CPU, Memory, Disk Bandwidth และ Network Bandwidth เพื่อช่วยทำให้เสมือนมีการแบ่งหลายๆ Environment บนเครื่องเดียวกัน (Host) ได้ แต่การทำงานในลักษณะ Virtual Environment (VE) แตกต่างกับ Virtual Machine (VM) ตรงที่จะไม่มีการจอง CPU, Memory, Disk เป็นของตัวเอง ไม่สามารถติดตั้ง OS แยกกันได้ และไม่มีการจำลอง Hardware ให้กับ VE เนื่องจาก VE จะอาศัย Resources ต่างๆ ที่มีอยู่บน Host ที่ติดตั้ง โดย Docker จะสร้าง Environment ของตัวเองขึ้นมาซึ่งเรียกว่า Container เพื่อให้สามารถรัน Application ที่ติดตั้งมาบน Container ได้
Vagrant
Vagrant มีหลักการทำงานโดยการจัดทำ Script และรายละเอียดการ Provision Setup ของ VM ออกมาเป็น Package โดย Vagrant ถูกออกแบบมาทำงาน On Top ของ VM Tools เช่น VirtualBox, VMWare, AWS โดยปกติแล้ว Vagrant จะมี Provider สำหรับ VirtualBox มาให้อยู่แล้ว ในกรณีที่ต้องการทำงานร่วมกับ VM Tools อื่นๆ ต้องติดตั้ง Provider เพิ่มเติม โดยดูรายนละเอียดได้จากลิงค์นี้ Vagrant Provider การทำงานของ Vagrant เมื่อติดตั้งลงบนเครื่องอื่นๆ จะทำการสร้าง Virtual Machine ของตัวเองขึ้นมา และมีการจำลอง CPU,Memory,Disk,Network และ OS ของตัวเองขึ้นมาบนเครื่อง Host ซึ่ง Vagrant ต่างกับ Docker ตรงจุดนี้
เปรียบเทียบระหว่าง Docker กับ Vagrant
ภาพแสดงให้เห็นถึงการวาง Stack ระหว่าง Docker (Container) กับ Vagrant (Virtual Machine) ที่แตกต่างกัน

Source Image: Docker
| รายการเปรียบเทียบ | Docker | Vagrant |
| ประเภท Visualization | VE | VM |
| มีการแบ่ง Resources ของ Hardware ที่ชัดเจน | No | Yes |
| Platform ที่รองรับ | เฉพาะ Linux | Linux Unix Windows |
| ระยะเวลาการ Startup | 2-3 วินาที | 2-3 นาที |
| ระดับการแบ่งของ Virtual System | บางส่วน | เต็มรูปแบบ |
| ขนาดของ Virtual System | มีขนาดเล็ก | มีขนาดใหญ่ แต่เล็กกว่า VM เต็มรูปแบบ |
| ข้อดีอื่นๆ | เรียนรู้ได้อย่างรวดเร็ว | สามารถ Integrate กับ CM Tools อื่นๆ ได้ |
บทสรุป
จากที่อธิบายข้างต้นจะเห็นได้ว่ารูปแบบการทำงานระหว่าง Docker และ Vagrant มีวัตถุประสงค์เดียวกัน คือ สามารถนำเอาระบบต่างๆ ที่สร้างขึ้นไปรันบนเครื่องอื่นๆ ได้อย่างรวดเร็ว ไม่จำเป็นต้อง Config อะไรมาก แต่ทั้งนี้การเลือกเครื่องมือสำหรับการใช้งานขึ้นอยู่กับความต้องการของระบบ หรือรูปแบบการนำไปใช้ของระบบนั้นๆ เช่น หากเป็นระบบที่ต้องการ Resources ที่ชัดเจนควบคุมได้ ควรเลือกใช้งาน Vagrant มากกว่า แต่หากต้องการนำระบบไปใช้งานบนเครื่อง Server อื่นโดยไม่เน้นให้การ Guarantee Resources สามารถเลือกใช้ Docker ได้
Reference
No comments:
Post a Comment