Docker 101 Intro เริ่มต้นทำความรู้จัก ในแบบนักพัฒนา

docker 101

Docker 101 ทำไมนักพัฒนา ทุกวันนี้ ถึงควรรู้จัก และใช้เป็นอย่างคล่องมือ มันสำคัญอย่างไร มีประโยชน์กับเราอย่างไร ช่วยให้การพัฒนา Application ต่างๆ สะดวก สบายขึ้นมาได้อย่างไร เราจะมาทำความเข้าใจกันครับ

ในบท Intro นี้ ผมจะไม่ได้ มาลงเรื่องของ วิธีการติดตั้ง หรือวิธีการ install set up อะไรแบบนั้นนะครับ แต่จะมาคุยกัน ว่า Docker คืออะไร ทำไมเราควรใช้งาน ทำไมผมถึงบอกว่า จำเป็น! สำหรับ นักพัฒนาในยุคนี้

Docker นักเทียบท่า ที่มีสัญลักษณ์ เป็นเจ้าวาฬสีฟ้า วาฬไม่ใช่ปลา เพราะมันเป็นสัตว์ เลี้ยงลูกด้วยนม อยู่ใน class Mammalia เอ….. เดี๋ยวๆ อันนี้ไม่ใช่ เรื่องที่เรา จะมาพูดกันนะครับ

เริ่มจาก Docker เนี่ย เป็น Open Plaform หรือ Application รูปแบบหนึ่ง ที่เอามาใช้ในการทำ Infrastructure ของระบบ Application เรา เช่น Web Server, Database, API Gateway และอื่นๆ

คือต้องบอกว่า ถ้าพูดถึงการสร้างระบบ Infra ในสมัยก่อน หรือจริงๆเดี๋ยวนี้ หลายๆที่ก็ยังคงใช้งาน แบบที่เป็น VM เจ้า Virtual Machine กันอยู่นั้นแหละ ซึ่งมันก็คือความคล้ายกันเลย เพียงแต่ว่า ความแตกต่างของมัน มันจะแยกออกไปตามนี้

VM หรือ Virtual Machine จะเป็น Computer 1 เครื่อง มองมันเป็นแบบ Physical Hardware ที่เราเอา Operating System ไปยัดเอาไว้ แล้วใช้ทำงานต่างๆ บนเครื่องแม่ ซึ่งโดยส่วนมาก เรามักมองมันเป็น Server 1 ตัว ที่มี Hypervisor ครอบเอาไว้

แล้วแต่ละใน VM ก็จะประกอบไปด้วย OS แต่ละตัว แล้วจึงมี App อยู่ด้านใน VM นั้นๆอีกที คือถ้าเรามี 3 VM อยู่ใน 1 เครื่อง Server เราจะต้องมี 3 OS แล้วก็แยก แต่ละ App ออกจากกันไปอีก

Docker 101 VM infra
รูปแบบ ของโครงสร้างแบบ VM

ดูจากรูป ด้วยความที่มี เครื่อง VM 3 เครื่อง มี OS 3 ตัว ระบบคงใหญ่น่าดู และกินทรัพยากรหนักมาก ทีนี้มาดูลักษณะของเจ้า Docker กันบ้าง หน้าตามันจะออกมาประมาณนี้

Docker Container
รูปแบบ ของโครงสร้าง Docker

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

แล้วให้ใช้งาน OS หลัก ทำให้ระบบ สามารถทำงานได้ โดยไม่ต้องลง OS จำนวนมาก ทำให้ระบบเบาขึ้นมาก และทำงานได้ รวดเร็วกว่า การสร้าง VM ขึ้นมาทีละตัว

Docker Architecture

สถาปัตยกรรมที่ Docker ใช้งานก็คือ ประเภท Client – Server โดยมี Docker Daemon หรือเจ้า Server เป็นตัวควบคุมการทำงานแบบ Background Process แล้วให้ Client รับคำสั่ง ผ่านทาง Command Line Interface จากผู้ใช้งาน เป็นตัวจัดการงานต่างๆ ซึ่งทำการสื่อสารกัน ผ่านทาง API และมี Docker Registries เป็นตัวจัดเก็บ Docker Object ต่างๆเอาไว้อีกที

Docker 101 ทั้งที ถ้าไม่พูดถึง Container กับ Image ก็คงจะไม่ได้

Objects เป็นสิ่งที่เราจะต้องทำงานด้วย จริงๆแล้วมีทั้ง Images, networks, Container, Volumn, Plugins และอื่นๆอีก แต่ตัวสำคัญที่เราต้องกล่าวถึง ก่อนเพื่อนๆก็คือ Container และ Image

Image ก็คือ สิ่งที่ผู้ใช้ สร้างขึ้นมา เพื่อเป็นต้นแบบ ให้กับ Docker ในการนำไปสร้างเป็น Container ต่างๆที่ใส่ Application ตามแต่ที่เราต้องการใช้งาน ลองมองมันเป็นตู้ Container จริงๆดูครับ ทีนี้พอมีคนเค้าสร้าง Service ขึ้นมากันเยอะมากๆ

ก็มีคนเอา image ไปวางใน Docker hub เพื่อแจกจ่าย ให้กับคนอื่นๆ สามารถเอาออกไปใช้งานกันได้ โดยที่ไม่ต้องสร้างใหม่ทุกครั้ง และใครก็สามารถ นำออกมาใช้งานได้ จะย้ายไปไหนก็ได้ ไอ้เจ้านี่แหละ ตัวสำคัญ ที่ทำให้ทีมทั้งทีม สามารถทำงานได้ โดยมี Environment เหมือนๆกัน

จริงๆแล้ว Docker มอง Service ทุกอย่างเป็นเหมือน ตู้ Container แล้วเอาไปวาง เรียงรายอยู่บนเรือลำใหญ่ ให้ Docker นำทาง Application ต่างๆที่เราต้องการใช้งาน ซึ่งแต่ละ Container ก็ทำงานเป็น อิสระต่อกัน แค่เชื่อมต่อ สื่อสารถึงกันได้เท่านั้น

ทีนี้พอเรามี Image แล้ว เราก็ต้องทำการ สร้างตัว Container ขึ้นมาเพื่อ Run Service ของเราที่ต้อการใช้งาน หมายความว่า 1 Image จะสร้างกี่ Container ก็ได้ แล้วเจ้า Container เนี่ย เราก็เอา App ของเราไปวางไว้ในนั้น เพื่อใช้งานนั้นเอง

ทีนี้มาถึงบทส่งท้าย ทำไมเราถึงควรใช้ Docker ละ

1.เพราะมันเบา และเร็ว

เนื่องจากความที่มันใช้ ทรัพยากรน้อย ทำให้เราสามารถ สร้าง Service จำนวนมาก ขึ้นมาได้ บนเครื่องของเราเอง โดยที่เราไม่ต้อง ไปติดตั้งอะไรลงบนเครื่อง Host ที่เราใช้งาน ไม่ต้องคอยกังวลว่ามันจะรบกวนระบบไหม แถมลงไปหลายๆตัวก็ไม่มีผล เช่น PHP, Node JS หลายๆ Version ยังได้

2.รองรับการ Scaling

นอกจากจะเบามันยังโดดเด่นในเรื่องของ portable มากกว่า VM ทำให้เราสามารถ เชื่อมต่อ Container ต่างๆเข้าด้วยกันได้อย่างง่ายดาย ทำให้ง่ายต่อการขยายหรือลดขนาด ตามความต้องการของผู้ใช้งาน

3.สร้างคนเดียว ใช้ได้ทั้งทีม

ในมุมของนักพัฒนา เรามักจะทำงานเป็นทีม แต่ว่าเครื่อง Computer ของแต่ละคน ก็ยากที่จะทำให้ Environment ของทุกคนเหมือนกัน แต่หากใช้งาน Docker แล้ว เราสามารถสร้างตัว Image ที่เป็นโครงสร้างของแต่ละ Project ขึ้นมา

แล้วคนอื่นๆ ก็เอาไปทำการ Run ขึ้นมาใช้งานได้ต่อทันที กลายเป็น Environment เดียวกันตามที่ออกแบบไว้เลย

หวังว่าเนื้อหานี้ คงทำให้ผู้อ่าน มีความรู้จักและเข้าใจ Docker มากขึ้นมาบ้างนะครับ เดี๋ยวผมจะมาเล่าและอธิบาย วิธีการใช้งาน Docker ในแบบต่างๆเพิ่มเติม ฝากติดตามกันด้วยนะครับ

ขอบคุณครับ
ธีรภัทร เกษสกุล

Docker Ofiicial Website

สำหรับคนที่สนใจ คำสั่งพื้นฐาน ของ Docker ลองดูบทความนี้ครับ 10 คำสั่งพื้นฐานที่มือใหม่ควรรู้

คุณพ่อของน้องเกี้ยมอี๋ ไม่รู้ว่าใครซนกว่ากัน ทำงานเป็นโปรแกรมเม่า Programmer ประจำบ้าน ดูหนัง ดูซีรี่ย์ เล่นเกมส์กับลูกชาย และลงทุนในคริปโต

Leave a Reply

Your email address will not be published.

Back To Top