Docker คืออะไร

Docker เป็น Software Container ประเภทหนึ่ง คล้ายๆกับ Virtual Machine ซึ่งมีความสามารถในการจำลองสภาพแวดล้อมของเครื่องคอมพิวเตอร์

Docker คืออะไร
Docker คือสภาพแวดล้อมของ linux แบบน้อยที่สุด ที่สามารถติดตั้งเฉพาะบริการ (Service) ที่ต้องการได้ เช่นหากเราต้องการสร้าง Web Server เราก็สามารถ ติดตั้ง Apache Mysql FTP phpMyAdmin ลงใน Container ได้ ซึ่งเมื่อสั่งรัน Container เราก็จะได้ Web Server ที่สามารถใช้งานได้เหมือนที่เราติดตั้งบนเครื่องของเราเอง

ประโยชน์ของ Docker
  • อันดับแรก คือการจำลองสภาพแวดล้อมของเครื่องที่ใช้ในการทดสอบให้เหมือนกับเครื่องที่ใช้งานจริงบน Server เนื่องจากปัญหาส่วนใหญ่ที่ Dev เจอในการทดสอบงาน คือสภาพแวดล้อมที่แตกต่างกันของเครื่องจริงและเครื่องทดสอบ ทำให้ได้ผลการทดสอบแตกต่างกัน
  • อันดับที่สอง คือการขยายระบบ ยกตัวอย่างเช่นตอนสิ้นเดือนที่มักจะมีปริมาณการใช้งาน Server มากกว่ากลางเดือน เราก็สามารถใช้ Docker หลายๆตัวช่วยกันทำงานได้ (มีคนช่วยกันทำงานมากกว่า 1 คน งานก็ต้องเสร็จเร็วกว่า หรือไม่ก็สามารถทำงานได้มากกว่า) โดยที่มีค่าใช้จ่ายเพิ่มไม่มากนักเฉพาะตอนที่มีการใช้งานเพิ่มเท่านั้น แลกกับการลงทุนขยายระบบด้วยการเพิ่ม Hardware เพราะใน 1 เดือน อาจจะมีแค่ช่วงเวลาสั้นๆเท่านั้นที่ต้องการทรัพยากรเพิ่ม

ข้อแตกต่างระหว่าง Docker และ Virtual Machine
  • Docker และ Virtual Machine มีข้อแตกต่างที่สำคัญคือ Virtual Machine จะทำการจำลองสภาพแวดล้อมมาทั้ง OS ในขณะที่ Docker จำลองมาเฉพาะส่วนที่จำเป็นในการทำงานเท่านั้น ทำให้ Docker จะมีการทำงานที่เบากว่า แต่ก็แลกมาด้วยข้อจำกัดที่ Docker มักจะถูกจำลองมาเพื่อใช้งานเฉพาะบางอย่างเท่านั้น เช่นทำเป็น Web Server หรือ Database Server ในขณะที่ Virtual Machine สามารถจำลองได้ทั้งหมดเหมือนกับคอมพิวเตอร์เครื่องหนึ่ง เช่น สามารถจำลอง Windows ได้ทั้งเครื่องบน Linux หรือ จำลอง Ubuntu บน Windows ได้
  • Docker จะใช้ทรัพยากรร่วมกันกับเครื่องคอมพิวเตอร์ ในขณะที่ Virtual Machine จะมีการแบ่งใช้ทรัพยากรกันอย่างเด็ดขาด ทำให้ Docker สามารถใช้ทรัพยากรทั้งหมดได้มากกว่า Virtual Machine และจากการที่สามารถใช้ทรัพยากรร่วมกันได้ ทำให้เราสามารถรัน Docker ได้หลายๆตัว มากกว่าที่ Virtual Machine ทำได้ ในทรัพยากรที่เท่าๆกัน

จุดเด่นของ Docker
  • ในกระบวน Software Container ทั้งหมด Docker จะใช้ทรัพยากรในการทำงานของตัวมันเอง น้อยที่สุดแล้ว
  • โลกนี้ไม่ได้มี Software Container เพียงแค่ Docker เท่านั้น ยังมีตัวอื่นๆอีกหลายตัว แต่ Docker ก็ใช้งานได้ง่ายที่สุดแล้ว
  • Docker สามารถแจกจ่ายได้ง่าย ด้วยการสร้างเป็น Image แล้วแจกจ่ายไฟล์ Image ไปให้คนอื่นใช้งานได้ (ง่ายมากๆด้วย) นอกจากนี้ยังมี Image ของ Docker ที่มีสภาพแวดล้อมแตกต่างกันจำนวนมากให้เลือกใช้
  • Docker สามารถ Config ได้ง่าย สามารถสร้าง Container หนึ่งตัวเพื่อรัน Web Service ได้ และสร้างอีกตัว เพื่อรัน MS SQL (คนละแพลตฟอร์มกัน) ได้ โดยใช้ทรัพยากรร่วมกัน
  • สามารถใช้ Docker สร้าง Service แบบเดียวกันหลายๆตัว แล้วให้แต่ละตัวช่วยกันทำงาน ทำให้สามารถรับผู้เยี่ยมชมได้มากขึ้น

ถึงแม้ว่า Docker จะมีจุดเด่นมากมาย แต่มันก็ไมได้จำเป็นสำหรับงานทุกกรณีไป
  • Server ภายในองค์กร ที่มีข้อจำกัดด้าน Hardware อยู่แล้วไม่จำเป็นต้องใช้ Docker เพราะการใช้ Docker ก็จำเป็นต้องมีทรัพยากรส่วนหนึ่งสูญเสียไป ในขณะที่เราไม่ได้ใช้ความสามารถใดๆของ Docker
  • การติดตั้ง Docker จำเป็นต้องได้สิทธิ์ระดับ root ซึ่ง Host ทั่วๆไปไม่สามารถทำได้ (ต้องเป็น VPS ขึ้นไป) ทำให้หลายๆคนหมดสิทธิ์ที่จะใช้ Docker
  • การใช้งาน Docker ควรใช้งานทั้งฝั่ง Server และบนเครื่องทดสอบ การขาดฝั่งหนึงฝั่งใด จะทำให้เราไม่สามารถใช้ความสามารถของ Docker ได้อย่างเต็มที่ ในการจำลองสภาพแวดล้อมของเครื่องที่ทดสอบให้เหมือนกับเครื่องที่ใช้งานจริง
  • การใช้งาน Docker อาจได้ Software เวอร์ชั่นเก่าตามที่ผู้สร้าง Image ของ Docker จัดทำไว้ รวมถึงอาจมีช่องโหว่ที่ผู้สร้างจัดทำไว้ด้วย ซึ่งกว่าจะรู้เราก็อาจเสียหายไปแล้ว การแก้ปัญหา ก็อาจต้องทำการสร้าง Image ด้วยตัวเอง หรือ สั่งอัปเดทด้วยตัวเอง ซึ่งก็ต้องใช้คำสั่งพื้นฐานของ linux อยู่แล้ว ไม่แตกต่างอะไรกันกับการทำงานโดยไม่ใช้ Docker

ถ้าไม่ใช้ Docker แล้วจะทำอย่างไร
  • ทดสอบบน Server จริงๆมันซะเลยสิ (ผมใช้วิธีนี้เป็นหลัก) ตัดปัญหาใช้งานไม่ได้ออก 100% ไม่ยุ่งยาก ไม่รบกวนเครื่องของเรา วิธีทำก็ง่ายกว่าการเรียนรู้ Docker อีก โดยใช้ความสามารถของ Editor ทั่วๆไป (หรือติดตั้งส่วนเสริม) ให้สามารถทำงานกับไฟล์ออนไลน์ได้ หรือ สามารถทำงานร่วมกับไฟล์ในเครื่องได้ โดยการอัปโหลดไฟล์ให้โดยอัตโนมัติหากมีการแก้ไข (ได้ backup เพิ่มอีกด้วย)
  • จำลองเครื่องของเราให้เหมือนกับ Server ที่ต้องการ จริงๆแล้วข้อนี้อาจจะยากสำหรับมือใหม่ แต่หลักแบบง่ายๆคือ ให้ติดตั้ง PHP เวอร์ชั่นเดียวกันกับบน Server (ส่วนใหญ่มักมีปัญหาข้อนี้แหละ) แต่ส่วนตัวเครื่องผมก็ติดตั้ง PHP5.6 และ PHP7 ไว้ และใช้ PHP5.6 เป็นส่วนใหญ่ ซึ่งก็ครอบคลุม Server ส่วนใหญ่แล้ว (ปัจจุบัน Server ขั้นต่ำควรเป็น PHP5.6) ซึ่งผมก็ใช้ทำงานมานับร้อย Server แล้วมั้ง โดยไม่จำเป็นต้องใช้ Docker และไม่พบปัญหาใดๆด้วย (ก่อนจะมี Docker เขาก็ใช้วิธีนี้กันนะ)
^