Docker เป็น engine ที่รันบน Linux ตัวนึงที่จะจําลองสภาพแวดล้อมของเครื่อง server ขึ้นมา คล้ายๆกับพวก VirtualBox, VMWare หรือ Virtual Machine ซึ่ง Docker จะแตกต่างจาก VM ตัวอื่นๆคือ **จะทําการจําลองสภาพแวดล้อมของ server ขึ้นมาบน OS เดิม **แต่ VM อื่นๆ จะจําลองระบบขึ้นมาทั้ง OS เลย ดังรูป
จะเห็นว่า VM จําลองขึ้นมาทั้ง OS เลย ทําให้ มี Process ที่รันขึ้นมาโดยไม่จําเป็น ในขณะที่ Docker จะแยก Guest OS ออกมา โดยจะเรียกว่า Container ซึ่งในแต่ละ Container คือการจําลอง Environment สำหรับ 1 Service เท่านั้น(ดูภาพประกอบ) ทําให้มีขนาดเล็ก สามารถรันขึ้นมาได้เร็ว และไม่เปลืองทรัพยากรณ์ของเครื่องเมื่อเที่ยบกับ VM
คําศัพท์ที่ต้องรู้
- Docker Image คือ Environment ที่เราสร้างขึ้นมา ซึ่งประกอบไปด้วย App ที่เราเขียนขึ้น, โปรแกรมต่างๆที่เราติดตั้งลงไป(ตัวอย่างคือ Apache, nginx, mysql) ค่า Config ต่างๆ ทั้งหมดนี้จะถูกห่อรวมกันเป็นก้อนเดียวเรียกว่า Docker Image
- Docker Registry คือ เป็นระบบที่ใช้เก็บ Docker Image ที่เราสร้างขึ้นมา Docker Registry ของ Docker เองก็มีเปิดให้บริการที่ hub.docker.com/
- Docker Container คือ Container จะถูกสร้าง เมื่อเรานํา Docker Image มารัน ซึ่ง Container จะสามารถสั่ง Start, Stop, Restart ได้ Container แต่ละตัวจะมี RAM, CPU, Users, File ต่างๆเป็นของตัวเอง
Docker Registry
สําหรับในหัวข้อนี้เราจะมาขยายความ Docker Registry กันซักนิดครับเนื่องจากมันเป็นจุดเด่นของ Docker ซึ่งมันเป็นแนวคิดที่จะจัดการ Docker Image ให้เข้าถึงง่าย สะดวกและรวดเร็ว โดย Docker Registry เป็นที่สําหรับเก็บ Docker Image ที่เราสร้างขึ้น หรือคนอื่นสร้างขึ้น เมื่อเราต้องการจะใช้งาน Docker Image ตัวไหนเราก็ pull มาใช้งานได้เลยเราก็จะได้ Environment ตามนั้นเปะๆ ลองเข้าไปดู Docker Registry ได้ครับที่นี่ครับ hub.docker.com/ สําหรับในเว็บนี้เป็นของ docker เอง ซึ่งมี Docker image ที่คนอื่นๆสร้างไว้มากมายรวมถึง OFFICIAL REPOSITORY (เป็น Docker image ของเจ้าของโปรแกรมทําขึ้นมาเอง)
ข้อดีของ Docker
- รวดเร็ว เนื่องจากมันมีขนาดเล็ก ทําให้เวลา start App ขึ้นมาเร็วกว่า VM
- มีระบบ Registry ซึ่งจะเป็นที่เก็บ image ที่ทําไว้แล้ว ซึ่งจะประหยัดเวลาในการสร้าง image ใหม่ ในกรณีที่เราต้องการ Environment ที่มีอยู่แล้วก็สามารถโหลดมา แล้ว start ใช้งานได้เลย
- Docker ใช้ RAM, CPU, พื้นที่จัดเก็บข้อมูลน้อยกว่า VM
- Docker สามารถย้าย App ของเราไปรันบนเครื่อง server อื่นๆได้อย่างง่ายดาย และเร็วมาก
- Docker สามารถจัดการ service ที่มีหลาย version ได้อย่างง่ายดาย เช่น php 5.4, php 5.6 สามารถสั่ง Start, Stop ได้ตามต้องการ
- Docker สามารถช่วยให้ Production Server มี Environment เดียวกันกับ Develop Server หมดปัญหา App ที่ develop ขึ้นมา แล้วรัน บนเครื่อง Production Server ไม่ได้
เอา Docker มาใช้ทําอะไร
จริงๆแล้ว Docker เป็น tool ที่อเนกประสงค์มากๆ สามารถนําไปประยุกต์ใช้งานต่างๆมากมาย แต่ที่เห็นได้ชัดเจนก็คือ มันจะช่วยให้เราจัดการ Environment ของ server ได้ง่ายมาก และรวดเร็ว ผมจะยกตัวอย่างนะครับ ถ้าเราจะสร้างเว็บขึ้นมาเว็บนึง สิ่งแรกที่เราต้องทําคือลงโปรแกรมต่างๆ เช่น Apache, nginx, mysql ฯลฯ เมื่อลงโปรแกรมเสร็จ เราก็จะต้องมา Config ค่าต่างๆเพื่อให้มันใช้งานกับเว็บเราได้ ต่อมาเรามีความจําเป็นที่จะต้องเปลี่ยนเครื่อง Server อันเนื่องมาจาก ต้องการเปลี่ยนไปใช้ Server ที่แรงขึ้นเพื่อรองรับคนได้เยอะขึ้น หรือ Server ตัวเก่ามีปัญหา เมื่อ server ตัวใหม่มา สิ่งที่เกิดขึ้นคือ เราจะต้องมานั่งลงโปรแกรมใหม่ ต้องมา Config ค่าต่างๆใหม่ ซึ่งกระบวนการตรงนี้มันค่อนข้างในเวลา Docker จะมาช่วยในการจัดการตรงนี้ โดยเมื่อเราเปลี่ยนเครื่อง Server หรือย้ายเว็บเราไปรันบน Server เครื่องใดๆก็แล้วแต่ เราไม่ต้องมาลงโปรแกรมใหม่ ไม่ต้องมา Config ค่าใหม่ เราสามารถที่จะรันเว็บของเราทั้งเว็บโดยใช้เพียงคําสั่งเดียว ซึ่งมันจะประหยัดเวลาไปได้มาก และช่วยลดความผิดพลาดที่เกิดจากการ config ต่างๆได้
“บนเครื่องผมมันรันได้นะ” คําพูดนี้จะหายไป ถ้าคุณใช้ Docker