ในปัจจุบันคนส่วนมากยอมรับว่าแอปพลิเคชั่นเป็นศูนย์กลางของธุรกิจทุกรูปแบบเช่น CBD (Central Business District) เกิดการแข่งขันภายในตลาดเพื่อพัฒนาแอผพลิเคชั่นให้รองรับการอัพเดทตามความต้องการของลูกค้า นอกจากทีมนักพัฒนาที่ต้องพัฒนาแอปพลิเคชั่นเป็นจำนวนมากขึ้นกว่าเมื่อก่อน ทีมการปฏิบัติการก็มีระบบที่มีขนาดใหญ่และซับซ้อนกว่าเดิม เเต่ทุกคนต่างรู้ว่าด้วยทรัพยากรที่มีอยู่อย่างจำกัดนั้นจำเป็นต้องมีการจัดการทรัพยากรเหล่านั้นให้เกิดประสิทธิภาพสูงสุดตอบสนองต่อจำนวนผู้ใช้งานแอปพลิเคชั่นในทุกสถานการณ์ดังนั้นจึงมีการนำเทคโนโลยี Container เข้ามาช่วยในเเต่ละองค์กรให้ใช้งานภายในระบบเพื่อการทำงานที่มีมาตรฐาน
Containers คืออะไร
Containers คือการจัดเก็บแอพพลิเคชั่นให้อยู่ในรูปแบบที่ง่ายต่อการโยกย้ายและนำขึ้นระบบการปรับใช้โดยประกอบไปด้วยตัวแอปพลิเคชั่น library หรือ binary จำเป็นในการรันแอพพลิเคชั่นนั้นและการกำหนดค่าของแอปพลิเคชั่นนั้น ไม่ว่าจะย้ายตัวแอพพลิเคชั่นที่ถูกจัดเก็บเป็น container ไปรันที่ไหนจะสามารถทำงานได้เหมือนเดิมโดยไม่คำนึงถึงระบบปฏิบัติการ Container เป็นเทคโนโลยีการจำลองเสมือนของระบบปฏิบัติการคอมพิวเตอร์เช่น CPU Memory แต่ละคอนเทนเนอร์ทำหน้าที่เป็นแพ็กเกจแยกต่างหากซึ่งสามารถเรียกใช้แอปพลิเคชันหรือบริการได้โดยไม่ต้องคำนึงถึงสภาพแวดล้อมการประมวลผลพื้นฐาน ภายในหนึ่ง container สามารถรันแอปพลิเคชั่นทั้งตัวหากเราแบ่งแบบ microservice ก็ได้แอพพลิเคชั่นในรูปแบบ container จะถูกรันผ่าน software ที่เรียกว่า container engine/runtime
- Containers จะมีชั้นของแอปพลิเคชันที่เก็บอยู่รวมกัน มีแพคเกจหรือชุดคำสั่งที่ใช้ทำงานร่วมกัน
- Containers ตั้งแต่หนึ่งตัวขึ้นไปสามารถรันบนคอมพิวเตอร์เครื่องเดียวกันและใช้เคอร์เนล
ของระบบปฏิบัติการร่วมกันกับ container ตัวอื่น ๆ - Containers แต่ละตัวทำงาน หรือประมวลผล แยกในพื้นที่ของตัวเอง
- Containers ใช้พื้นที่น้อยกว่า Virtual Machine ไฟล์อิมเมจมีขนาดเล็ก หลัก เมกกะไบต์
- Containers สามารถจัดการแอปพลิเคชันได้มากขึ้น ใช้จำนวน Virtual Machine และ
จำนวนระบบปฏิบัติการน้อยลง
ประวัติเเละที่มาของ Containers
- ปี ค.ศ.1970 มีแนวคิดของ FreeBSD Jails ที่มีความซับซ้อนและมีต้นทุนเริ่มต้นสูง
- ปีค.ศ.2000 นำแนวคิด FreeBSD Jails มาพัฒนาต่อ เป็นจุดกำเนิดแนวคิด Containers บนระบบปฏิบัติการตระกูล UNIX
- ปี ค.ศ. 2004 ระบบปฏิบัติการ Solaris ของบริษัท Sun Microsystems มีคุณลักษณะเดียวกัน ใช้ชื่อว่า Zones (หรือ Solaris
Containers) กลุ่มระบบปฏิบัติการลินุกซ์น าแนวคิดนี้มาสืบสานต่อในโครงการ OpenVZ หรือ Linux Containers (LXC) - ปี ค.ศ. 2013 Containers แพร่หลายในวงกว้างจาก Docker ที่เป็นส่วนหนึ่งของโครงการพัฒนา LXC ต่อมา Docker มีการ
พัฒนาส่วนต่างๆ ขึ้นมาเองจนสมบูรณ์พร้อมใช้งาน ทำให้แนวคิด Container ได้รับการยอมรับในวงการอย่างรวดเร็ว มีตัวอย่าง
การใช้งานจากบริษัทใหญ่อย่าง Google ที่พัฒนาฟีเจอร์ของ Google Compute Engine ให้รองรับอย่างรวดเร็ว - ปี ค.ศ. 2014 จากผลตอบรับของผู้พัฒนาระบบ ทำให้ บ.ไมโครซอฟท์เข้ามาร่วมแนวคิด ทำให้ระบบปฏิบัติการฝั่งวินโดวส์ใช้งาน
Docker ได้และพัฒนาสำเร็จใน Windows Server 2016 - ปัจจุบันความสำเร็จของ Docker ทำให้เกิดคู่แข่งขึ้น เช่น Rocket หรือ rkt ของบริษัท CoreOS ของค่ายยักษ์ใหญ่ Red Hat ทำให้ Containers แยกออกเป็นสองสายแต่มีการออกมาตรฐานกลางภายใต้การดูแลขององค์กรชื่อ Open Container Initiative (OCI)
การเพิ่มประสิทธิภาพทรัพยากรและการดำเนินการ Containers
โดยปกติคอนเทนเนอร์จะใช้ทรัพยากรในการประมวลผล CPU และ RAM น้อยกว่ามากเมื่อเทียบกับ Virtual Machine ด้วยเหตนี้ทำให้คอนเทนเนอร์ ทำงานบนเซิร์ฟเวอร์หรืออินสแตนซ์เดียวกันมากกว่า Virtual Machine จึงเป็นการช่วยเพิ่มประสิทธิภาพในการใช้ทรัพยากรคอมพิวเตอร์ นอกจากนี้คอนเทนเนอร์ยังใช้เวลาบูท ปรับขนาดหรือยกเลิกแอปพลิเคชันที่เร็วกว่าเมื่อเทียบกับ Virtual Machine
ตัวอย่างการนำ Containers ไปใช้งาน
- การนำ Containers มาใช้ช่วยแก้ปัญหาเรื่อง infrastructure / system dependency ระหว่างแอปพลิเคชันแต่ละเวอร์ชัน หรือแต่ละสถานะ เช่น dev / test or UAT / production เนื่องจากส่วนประกอบที่จำเป็นของแต่ละแอปพลิเคชันได้ถูกรวมมาในอิมเมจแล้ว จึงเป็นข้อดีของกระบวนการเปลี่ยนโค้ดที่เขียนไว้ ไปสู่กระบวนการ deployment เพื่อการใช้งานจริงบน production หรือที่เราเรียกกันว่า CI/CD
- การใช้งาน Containers เพื่อแยกแอปพลิเคชันแบบเดิมที่เขียนมาเป็นชิ้นเดียวกัน (Monolithic) ให้กลายเป็นไมโครเซอร์วิส (Microservice) ที่มีขนาดเล็กลง จัดการได้สะดวกขึ้น สามารถสเกลเซอร์วิสบางตัวหากต้องการรับโหลดมากขึ้น
- การนำ Container ของแอปพลิเคชันที่ท าขึ้นหรือแยกออกเป็นไมโครเซอร์วิสแล้วนั้น ไปประมวลผลบนโครงสร้างพื้นฐานคลาวด์ที่มีความสามารถในการสเกลตัวเองได้ จะมีความซับซ้อนสูงตามไปด้วย ต้องใช้ความสามารถของซอฟต์แวร์ที่เรียกว่า orchestration เช่น Kubernetes หรือ Apache Mesos เข้ามาควบคุม
Containers มีระบบสามารถถูกอัพเดทเพิ่มและลดได้อย่างรวดเร็วและง่ายขั้นตอนการอัปเดตเองสามารถทำได้อย่างอัตโนมัติเมื่อมีความต้องการใหม่ๆ หรือการเพิ่มมาตรฐานความปลอดภัยของแอปพลิเคชั่น เราสามารถอัพเดทและสร้าง containers ขึ้นเป็น containerอ image และส่งขึ้นไปบน image registry เพื่อให้ผู้ดูแลนำขึ้นระบบ ข้อด้อยของ Containers คือมีความยืดหยุ่นน้อยกว่า Virtualization โดยเฉพาะการที่ไม่สามารถใช้ระบบปฏิบัติการที่แตกต่างกันระหว่าง Guest และ Host ได้ (ใช้ OS ตัวเดียวกัน) หรือคุณสามารถหาความรู้เพิ่มเติมได้เกี่ยวกับ Containers ได้ใน Google
ข้อมูลอ้างอิง
รู้จัก Container มันคืออะไร แตกต่างจาก Virtualization อย่างไร? ,[ออนไลน์], เข้าถึงได้จาก https://www.blognone.com/node/105928
Container คืออะไร? ,[ออนไลน์], เข้าถึงได้จาก https://www.ecloudvalley.com/th/th-solutions/th-containers/
Containers vs. Virtual Machines ต่างกันอย่างไร ,[ออนไลน์], เข้าถึงได้จาก https://monsterconnect.co.th/containers-vs-virtual-machines/