nstru

การใช้งาน Docker เบื้องต้น

มาเริ่มต้นทำความรู้จัก Docker กันครับ



การใช้งาน Docker เบื้องต้น

มาเริ่มต้นทำความรู้จัก Docker กันครับ

การใช้งาน Docker เบื้องต้น

หมวดหมู่ : เทคโนโลยี




Docker คืออะไร ?

Docker คือ  เครื่องมือแบบ Open-source ที่ช่วยจำลองสภาพแวดล้อม (Environment) ในการรัน Service หรือ Server ตามหลักการสร้าง Container เพื่อจัดการกับ Library ต่างๆ อีกทั้งยังมีเครื่องมือในการจัดการในเรื่องของ Version Control เพื่อง่ายต่อการจัดการ และปรับปรุงการบริการ ซึ่งในปัจจุบันในโลกของการพัฒนา Software มีรูปแบบการทำงานแบบ Agile ที่เน้นความรวดเร็วในการส่งมอบงานในแต่ละขั้นตอน Docker จึงเป็นที่รู้จักในวงกว้างและเริ่มเข้ามามีบทบาทอย่างมากในโลกของการพัฒนา Software สามารถรองรับการติดตั้งใช้งานบนระบบปฏิบัติการที่หลากหลายไม่ว่าจะเป็น Linux, Windows, MAC

องค์ประกอบพื้นฐาน Docker

Docker File คือเอกสารบอกสูตร (การใช้งาน และคำสั่ง) เพื่อสร้าง Docker Image นั้นๆ

Docker Image เป็นแบบแปลนที่จะใช้สร้างเป็น Docker Container ท่ีประกอบไปด้วยแอปพลิเคชันต่างๆที่จะทำงานเมื่อมีการเรียกใช้งานที่ Docker Container นั้นๆ รวมทั้งมีการตั้งค่า จำลองสภาพแวดล้อม (Environment) ที่จำเป็นสำหรับการทำงานของมันไว้ด้วย

Docker Container เป็นที่บรรจุรวมไว้ทั้งแอปพลิเคชัน, สภาพแวดล้อมที่จำเป็นต่อการทำงาน และองค์ประกอบต่างๆ ที่จำเป็นต่อการทำงานของมัน ซึ่งเราได้สร้างมันมาจาก Docker Image ผ่านการกำหนดโครงสร้างของมันที่ Docker File

เปรียบเทียบ Container vs Virtual Machine


Container และ Virtual Machine นั้นมีเป้าหมายเดียวกันคือ การแยกแอพพลิเคชัน (Application) และไลบรารี (Library) รวมทั้งไฟล์ต่างๆ ที่เกี่ยวข้องเก็บไว้ในกล่องที่สามารถนำไปทำงานบน Host ได้ทุกที่ แต่ทั้ง Container และ Virtual Machine มีสถาปัตยกรรมที่แตกต่างกัน

Virtual Machine นั้นจะจำลองคอมพิวเตอร์ทั้งเครื่อง และทำงานโปรแกรมได้เหมือนกับคอมพิวเตอร์จริงๆ โดย Virtual Machine จะใช้ Hypervisor ในการรัน ซึ่งสามารถทำงานบน Hardware/Infrastructure โดยตรง หรือจะทำงานบนระบบปฏิบัติงาน (OS) เลยก็ได้

    Hypervisor ที่ทำงานบนระบบปฏิบัติการ (Hosted Hypervisor) ได้เแก่ VMware Workstation, Microsoft Virtual PC และ Oracle Virtual Box เป็นต้น

    Hypervisor ที่ทำงานบนฮาร์ดแวร์ (Bare-metal Hypervisor) ได้แก่ VMware ESX, Citrix Xen Server และ Microsoft Hyper-V เป็นต้น

ซึ่ง Container แตกต่างจาก Virtual Machine ตรงที่ Virtual Machine เป็นการจำลอง Hardware (Hardware Virtualization) ขณะที่ Container เป็นการจำลอง OS (Operating System Virtualization) ซี่งทำให้ Container แต่ละตัวที่ทำงานบน Host เดียวกันจะมีการแชร์ System Kernel ร่วมกัน

ข้อดี และข้อเสียของ Docker

ข้อดีของ docker

Portability ทดสอบ Container ที่เดียวสามารถ Deploy ได้ทุกที่ที่มี Docker รันอยู่โดยไม่ต้องกลัวว่าจะไม่สามารถรันได้

Performance เนื่องจาก container ไม่ได้มีการบรรจุ OS เข้าไปด้วย นั่นหมายความว่า docker นั่นจะมีขนาดเล็กกว่า VM ทำให้ขนาดเล็ก, build ได้เร็วกว่า รวมถึงการรันได้มีประสิทธิภาพดีกว่าด้วย

Agility ด้วย portability และ performance ช่วยให้เหมาะสมกับการทำ Agile process รวมถึงเหมาะกับการทำ CI/CD อีกด้วย ช่วยให้ Compile, Build, Test ได้ดียิ่งขึ้น

Scalability เราสามารถสร้าง container ใหม่ ได้ตามความต้องการของ Application ที่ Scale ได้ โดยใช้เวลาอันสั้น

ข้อเสียของ Docker

เนื่องจากการรัน Docker ไม่ได้รัน OS ใหม่ทั้งหมดเป็นเพียงแค่การจำลอง Environtment ทำให้อาจเกิดการโจมตีที่ OS หลักผ่านทาง Docker ได้และอาจกระทบกับ Container ตัวอื่นๆ

ตอนเริ่มแรกที่ Docker ถูกสร้าง มันถูกออกแบบมาเพื่อรองรับการรันบน Linux เท่านั้น ที่เราสามารถรัน Docker บน Window,Mac ได้นั้นเพราะ เมื่อเราลง Docker ใน Window,Mac จะมีการสร้าง VM ที่เป็น Linux เพื่อมารัน Docker อีกที ทำให้ประสิทธิภาพการทำงานอาจจะไม่สามารถทำได้สูงสุดเท่ารันบน Linux 

Docker ไม่เหมาะกับการจัดการ Resource บนเครื่องใหญ่ๆ หรือไม่เหมาะกับโปรแกรมที่ออกแบบมาเพื่อทำงานบน VM

Learning curve ที่สูง เนื่องจากเป็นการทำงานเกี่ยวกับ OS, network รวมถึงการจัดการทรัพยากรต่างๆ ทำให้ต้องอาศัยเวลาการเรียนรู้ที่ค่อนข้างสูง แต่ทาง docker ก็มี tool ใหม่ๆ ออกมาช่วยเหลือให้ใช้งานได้ง่ายยิ่งขึ้น แต่การที่จะใช้งาน docker ได้อย่างช่ำชองจำเป็นต้องเรียนรู้ tools อื่นเพื่อใช้ในการประกอบด้วย