Docker เป็น Software ที่เข้ามาช่วยจัดการในเรื่องของการติดตั้งระบบบน Server และช่วยลดความผิดพลาดเมื่อต้องนำระบบที่พัฒนาบน Development Server ไปติดตั้งบน Production Server โดยนำหลักการของ “คอนเทนเนอร์” (Container) มาใช้ในการติดตั้งระบบ
ก่อนจะเริ่มอธิบายในส่วนของ Docker จะขออธิบายเพิ่มเติมสำหรับ “คอนเทนเนอร์” (Container) กันก่อน
Container เป็นรูปแบบที่ใช้ในการจัดการ Software ประเภทหนึ่ง มีลักษณะคล้ายกับ Virtual Machines (VM) ที่มีการใช้มาอย่างยาวนาน แต่ตัว Virtual Machinesจะมีขนาดที่ค่อนข้างใหญ่เพราะใน 1 VM จะมีส่วนที่เป็น OS รวมถึง Library และ Service ต่างๆ ที่จำเป็นต้องติดตั้งเสริมเข้าไปเพื่อให้สามารถใช้งาน OS ได้อย่างเต็มประสิทธิภาพ แต่ Container ได้ตัดส่วนที่ไม่จำเป็นสำหรับการใช้งาน Application ออกทั้งหมด และเหลือไว้เฉพาะแค่ ส่วนของ OS และ Service ที่จำเป็นสำหรับใช้งานกับ Application ที่เราต้องการเท่านั้น ทำให้ Container 1 ตัวมีขนาดที่เล็กมากเมื่อเทียบกับขนาดของ VM 1 ตัว
องค์ประกอบของ Docker
Docker ประกอบไปด้วย 4 ส่วนหลักๆ ดังนี้
1. Docker client and server
Docker client เป็นส่วนที่นักพัฒนาเขียนคำสั่งในการใช้งาน Docker และจากนั้นจะมีการส่งคำสั่งไปทำงานบน Docker server โดยผ่านทาง Rest API
Docker server (หรือจะเรียกว่า Docker Host ก็ได้) เป็นส่วนที่ใช้สำหรับ Build และ Run Docker Container โดยจะทำการรับคำสั่งต่างๆ มาจาก Docker client จากนั้นจะทำการอ่านข้อมูลที่อยู่ใน Docker Image และแสดงผลลัพธ์ที่ได้ออกมาเป็น Application ให้ผู้พัฒนาได้ใช้งานตามที่ต้องการ
2. Docker image
เป็นไฟล์ที่เก็บคำสั่งที่ใช้สำหรับ Run Docker Container โดยจะประกอบไปด้วยชุดคำสั่งที่ใช้สำหรับติดตั้ง Application และ Environment ต่างๆ เช่น การกำหนดเงื่อนไขในการจัดเก็บข้อมูลของ Container เป็นต้น ชุดคำสั่งภายใน Docker image จะเขียนโดยใช้ภาษาที่เรียกว่า YAML ซึ่งย่อมาจาก Yet Another Markup Language
3. Docker registry
Docker registry หรือเรียกอีกชื่อหนึ่งว่า Docker Hub เป็นส่วนที่นักพัฒนาจะทำการ Upload Docker image ของ Application ที่ตัวเองได้พัฒนาเก็บเอาไว้บน server ส่วนกลางเพื่อให้นักพัฒนาคนอื่นๆ สามารถ Download Docker image ที่ต้องการมาใช้งานบน Docker server ได้
4. Docker container
เป็นส่วนของ Application และ Environment ที่ถูกสร้างขึ้นและจะทำงานตามคำสั่งที่ถูกกำหนดไว้ใน Docker image
ข้อดีของ Docker
- มีขนาดเล็กและมีความต้องการในการใช้ CPU, RAM ที่น้อยกว่าเมื่อเทียบกับ VM ทำให้ประหยัดทรัพยากรบน Server มากกว่า
- สามารถติดตั้งระบบบน server ได้ง่าย ขอแค่ server ที่นำไปติดตั้งมีการ install Docker Server ไว้
- ช่วยลดปัญหาเรื่องความแตกต่างและความผิดพลาดในการติดตั้งระบบบน Develop Environment และ Production Environment โดยการใช้ Docker image ในการติดตั้ง
- Docker สามารถทำงานได้หลาย OS ทั้ง Window, Linux และ Mac
- มี Community ขนาดใหญ่ เนื่องจาก Docker ค่อนข้างได้รับความนิยมและมีนักพัฒนาใช้งานกันอย่างกว้างขวาง ทำให้เวลาที่ติดปัญหาในการใช้งาน ก็สามารถค้นหาข้อมูลเพื่อหาวิธีในการแก้ไขปัญหาได้ไม่ยาก
ข้อเสียของ Docker
- มี Learning curve ที่ค่อนข้างสูงเพราะต้องใช้เวลาในการเรียนรู้คำสั่งต่างๆ ที่ใช้ในการจัดการ Docker รวมถึง คำสั่งที่ใช้ในการติดตั้งแต่ละ Application ก็มีความแตกต่างกันอีกด้วย
- การจัดเก็บข้อมูลแบบถาวรในตัว Docker มีความยุ่งยาก และไม่ควรเก็บข้อมูลสำคัญไว้ใน Container เพราะเมื่อมีการปิด Container ข้อมูลที่อยู่ภายใน Container จะหายไป จึงควรทำการตั้งค่าใน Docker เพื่อบันทึกข้อมูลสำคัญไว้ภายนอก
การนำ Docker มาช่วยในการติดตั้งระบบ อาจจะมี Learning curve ที่ค่อนข้างสูงในช่วงแรก แต่หลังจากที่สามารถใช้งาน Docker ได้แล้ว จะช่วยสร้างมาตรฐานในการติดตั้ง รวมถึงลดข้อผิดพลาดที่อาจจะเกิดขึ้นได้จากการย้ายระบบจาก Development ไปยัง Production Server นอกจากนี้ยังช่วยประหยัดค่าใช้จ่ายและทรัพยากรที่ต้องนำมาใช้ใน Server อีกด้วย
ที่มา :