หลายคนคงเคยเล่น Virtual Machine ( VM ) บนเครื่องมืออย่าง VirtualBox หรือ VMware Workstation กันมาบ้างแล้ว ถึงคราวของ Docker เครื่องมือของเหล่า Developer และ System Admin ที่ใช้ในการ Develop, Deploy และ Run แอพพลิเคชั่นด้วย Container
Architecture
Image vs Container
Container จะถูกเรียกใช้โดยการรัน Image ซึ่งจะเป็นการ Execute Package ที่ประกอบด้วย Code, Runtime, Library, Environment Variable และ Configuration File ซึ่งใช้ในการรัน Application พูดง่าย ๆ ก็เป็นเหมือนชุด Buundle พร้อมใช้งานเลย การทำงานของ Container จะถูกรันในลักษณะเป็น Instance ของ Image บน Memory เมื่อมีการ Execute Image กับ State หรือ User Process ใครเรียน OS มาก็น่าจะเข้าใจ
Container vs Virtual Machine
Container จะถูนรันแบบ Native บน Linux และจะทำการแชร์ Kernel ของ Host Machine กับ Container อื่น ๆ โดยจะรัน Process ในลักษณะแบบไม่ต่อเนื่อง Discrete Process และใช้งาน Memory ไม่มากไปกว่าการ Execute ทำให้มันเบามาก ๆ Lightweight ในทางตรงข้าม VM จะถูกรันแบบ Guest คือมีการจอง Resource กันไว้ก่อนด้วย Hypervisor ใช้ของใครของมันไม่มีการแชร์กัน แต่ดีกว่าตรงที่มัน ให้ Environment และ Resource มากกว่าที่แอพพลิเคชั่นต้องการ
Pros
- Container จะแชร์ Resource ร่วมกันทำให้มันมีขนาดเล็กมากเมื่อเทียบกับ VM ที่ต้องมี OS เป็นของตัวเอง และมีการจัดการ Resource แยกกันด้วย Hypervisor
- ลดปัญหาในเรื่องของ Environment ระหว่าง Production กับ Dev ของ Application
- สามารถสร้าง Image เก็บไว้เป็น Docker Registry บน Docker Hub ที่สามารถใช้ได้ฟรี และยังสนับสนุนในเชิงพาณิชย์ Commercial ด้วย Docker Trusted Registry
- สามารถติดตั้งได้ง่าย สะดวกรวดเร็ว ไม่ต้องเสียเวลามานั่งลง OS
- สามารถ Deploy ขึ้นระบบ Cloud ได้ทันที
- สามารถใช้งานได้ทั้ง Windows, Linux และ Mac
Cons
- ข้อเสียหลักที่มองเห็นเลยคือด้าน Security พวก Virus, Malware เนื่องจากมีการแชร์ Kernel และ Component ต่าง ๆ ทำให้มีสิทธิ์ในการเข้าถึง Root ได้ และทำให้ Container ต่าง ๆ ได้รับผลกระทบไปด้วย
- ความยืดหยุ่นในเรื่องของ OS น้อยลง เมื่อเทียบกับ VM ที่สามารถลง OS อะไรก็ได้
- มีความยุ่งยากในด้าน Network ที่ต้องตั้งค่าและเชื่อมต่อให้มีความเหมาะสม
อ่านเพิ่มเติม : https://dockr.ly/2L7URX7
Leave a Reply