Docker ความประหยัดที่มากับประสิทธิภาพที่เพิ่มขึ้น
News

By Jeje - 18/12/2018

Docker คืออะไร
 Docker ก็เป็น Software Container ที่ถูกพัฒนาขึ้นมาให้สามารถการจัดการ Container ได้ง่าย Image มีขนาดเล็ก แยกเป็นชั้นๆ สร้างแนวคิด build, ship, run ที่แต่ละรอบของการสร้าง Container เร็วขึ้นมาก ทำให้เป็นที่สนใจและกำลังแพร่หลายในกลุ่ม Developer และ System Admin
Docker มีชุดซอฟต์แวร์ให้ใช้งานดังนี้
 - Docker Engine เป็น Core หลักในการทำงาน
 - Docker Machine เป็นซอฟต์แวร์สำหรับสร้าง หรือ เซ็ตอัพเครื่องให้พร้อมสำหรับ container
 - Docker Swarm เป็นซอฟต์แวร์ที่เอาไว้เชื่อมต่อ Docker Engine หลายๆเครื่องมาเชื่อมต่อรวมกันให้เป็น cluster
 - Docker Compose เป็นซอฟต์แวร์สำหรับอำนวยความสะดวกในการรัน Container โดยสามารถสั่งรันหลายๆ Container ได้พร้อมๆกัน ตั้งค่าต่าง ๆ รวมไปถึงเชื่อมโยง Container ให้สามารถทำงานร่วมกันได้

แล้ว Software Container คืออะไร
 Software Container เป็น concept ของการสร้างสภาพแวดล้อมเฉพาะให้ซอฟต์แวร์ทำงานได้โดยไม่กวนกับซอฟต์แวร์ตัวอื่นบนระบบปฏิบัติการเดียวกัน เราสามารถเอา Container ไปรันในคอมพิวเตอร์หรือ Server เครื่องไหนก็ยังทำงานได้เหมือนเดิม โปรแกรมใน Container ยังทำงานได้ปกติไม่ผิดเพี้ยนจากเดิม ที่ผ่านมา Software Container มีการพูดถึงและมีการใช้งานกันมานานแล้ว อาทิ LXC (Linux Container), Solaris Containers, OpenVZ เป็นต้น แต่ไม่เป็นที่แพร่หลายมากนัก เนื่องจากมีการใช้งานค่อนข้างยุ่งยาก ปัจจุบันจึงได้เกิด Engine ที่ชื่อว่า Docker เป็นตัวจัดการ Container ที่ใช้งานได้ง่ายกว่าตัวอื่นๆทำให้ได้รับความนิยมในวงกว้าง และกำลังเข้ามามีบทบาทในกลุ่ม Developer และ DevOps หรือ System Admin มากขึ้นเรื่อยๆ

ข้อแตกต่างระหว่าง Virtual Machine กับ Container
 - Container จะเป็นการเพื่อจำลองและควบคุมสภาพแวดล้อมสำหรับการรันเฉพาะบาง Service เช่น Contianer ที่รัน nginx ใน ubuntu ก็จะบรรจุ Environment เหล่านี้ไว้เป็น 1 Contianer และรัน service เท่าที่จำเป็นต้องใช้เท่านั้น ทำให้ใช้ทรัพยากรน้อยกว่า Virtual Machine
 - Virtual Machine จะเป็นการจำลอง Environment มาทั้ง OS รันขึ้นมาเป็นเครื่อง Server 1 เครื่อง และมีการรัน service หลายๆ service ใน VM เดียวกัน ทำให้แต่ละ VM ต้องใช้ทรัพยากรจำนวนมาก

CONTAINERVirsual Machine

Picture courtesy of Docker.


การใช้งาน Container
 รูปแบบการนำคอนเทนเนอร์ไปใช้งานมีหลากหลาย แต่ที่พบบ่อยคือการนำแอพพลิเคชันองค์กรในแบบเดิมๆ (ซึ่งมักเป็นแอพที่เขียนด้วยเทคโนโลยียุคก่อนอย่าง Java, .NET หรือ PHP) มาใส่ไว้ในคอนเทนเนอร์ เพื่อมารันบนโครงสร้างพื้นฐานยุคใหม่ที่เป็นคลาวด์ แทนที่การใช้เซิร์ฟเวอร์แบบดั้งเดิมที่เริ่มล้าสมัย ช่วยให้การย้ายขึ้นคลาวด์ราบรื่นกว่าเดิม
 นอกจากนี้ เทคโนโลยีคอนเทนเนอร์ยังช่วยแก้ปัญหาเรื่อง system dependency ระหว่างแอพแต่ละเวอร์ชัน แต่ละสถานะ (เช่น dev/test/production) เพราะทุกอย่างที่จำเป็นถูกรวมมาในอิมเมจให้หมดแล้ว มันจึงมีประโยชน์ในแง่กระบวนการเปลี่ยนโค้ดที่เขียน ไปสู่การดีพลอยใช้งานจริงบนเซิร์ฟเวอร์ปลายทาง หรือที่เราเรียกกันว่า CI/CD อีกด้วย
 การใช้งานคอนเทนเนอร์อีกแบบหนึ่งที่พบบ่อยในช่วงหลัง คือการแยกแอพพลิเคชันยุคเดิมที่เขียนมาเป็นก้อนใหญ่ๆ (monolithic) ให้กลายเป็นไมโครเซอร์วิส (microservice) ที่มีขนาดเล็กลง จัดการได้สะดวกขึ้น สามารถสเกลเซอร์วิสบางตัวหากต้องการรับโหลดมากขึ้น
 การนำคอนเทนเนอร์ของแอพพลิเคชันที่แยกเป็นไมโครเซอร์วิส ไปรันบนโครงสร้างพื้นฐานยุคคลาวด์ที่สเกลตัวเองได้ง่ายขึ้น จึงมีความซับซ้อนสูงตามไปด้วย และกลายเป็นหน้าที่ของซอฟต์แวร์ที่เรียกว่า orchestration (เหมือนวาทยากรนำวงออเคสตร้า) อย่าง Kubernetes หรือ Apache Mesos ที่จะกล่าวถึงในบทความตอนต่อไป
CONTAINER

Picture courtesy of Docker


Video courtesy of Docker

Jeje

เป็นผู้ที่มีความสนใจในเทคโนโลยีไอที และ Opensource เช่น Linux OS, CentOS, Zimbra, Zental

Twitter  Facebook  Line  Google+  Stumbleupon  
expand_less