Docker คืออะไร ต่างจาก Virtual Machine ยังไง

Docker คืออะไร เป็นคำถามที่โปรแกรมเมอร์มือใหม่มักเจอควบคู่ไปกับ Git เพราะเป็นอีกเครื่องมือหนึ่งที่ทีมพัฒนาซอฟต์แวร์สมัยใหม่แทบทุกทีมใช้กัน บทความนี้จะอธิบาย Docker คืออะไรแบบเข้าใจง่าย พร้อมเปรียบเทียบกับ Virtual Machine ที่มือใหม่มักสับสนว่าเหมือนหรือต่างกันตรงไหน

Docker คืออะไร พูดง่ายๆ

Docker คือเครื่องมือที่ช่วยรันโปรแกรมภายใน container ซึ่งเป็นสภาพแวดล้อมจำลองที่แยกตัวเองออกจากเครื่องจริง ทำให้โปรแกรมทำงานเหมือนกันทุกเครื่องไม่ว่าจะรันบนเครื่อง Windows ของนักพัฒนา, Mac ของเพื่อนร่วมทีม หรือเซิร์ฟเวอร์ Linux ตอน deploy จริง

ปัญหาคลาสสิกที่ Docker แก้ได้ตรงจุดคือ “it works on my machine” — สถานการณ์ที่โค้ดทำงานได้ปกติในเครื่องคนเขียน แต่พอส่งไปให้คนอื่นหรือ deploy ขึ้นเซิร์ฟเวอร์กลับพัง เพราะเวอร์ชัน library, การตั้งค่าระบบ หรือ dependency บนเครื่องต่างกัน Docker แก้ปัญหานี้ด้วยการห่อทั้งโปรแกรมและทุกอย่างที่มันต้องการ (library, dependency, การตั้งค่า) ไว้ใน container เดียวกัน รันที่ไหนก็ได้ผลลัพธ์เหมือนกันเป๊ะ ไม่ว่าจะรันบนเครื่องนักพัฒนาคนไหน หรือเซิร์ฟเวอร์ที่ไหนก็ตาม

Container คืออะไร

container คือหน่วยที่บรรจุโปรแกรมพร้อมทุกอย่างที่จำเป็นสำหรับรันโปรแกรมนั้นไว้ครบในที่เดียว สร้างจากพิมพ์เขียวที่เรียกว่า image เปรียบเทียบง่ายๆ image เหมือนพิมพ์เขียวหรือแม่พิมพ์ ส่วน container คือของจริงที่สร้างขึ้นมาจากพิมพ์เขียวนั้น สามารถสร้าง container หลายตัวจาก image เดียวกันได้ แต่ละตัวทำงานแยกอิสระจากกัน

Docker ต่างจาก Virtual Machine ยังไง

นี่คือจุดที่มือใหม่สับสนบ่อยที่สุด เพราะทั้งคู่ดูเหมือนทำหน้าที่คล้ายกันคือ “จำลองสภาพแวดล้อมแยกจากเครื่องจริง” แต่วิธีทำงานต่างกันโดยพื้นฐาน

Virtual Machine (VM) จำลองฮาร์ดแวร์ทั้งชุดขึ้นมาใหม่ รวมถึงต้องติดตั้งระบบปฏิบัติการเต็มรูปแบบแยกต่างหากสำหรับแต่ละ VM ทำให้ใช้พื้นที่และหน่วยความจำเยอะ บูตช้า (เป็นนาที) เพราะต้องบูตทั้ง OS ใหม่ทุกครั้ง

Docker container ไม่จำลองฮาร์ดแวร์หรือ OS ใหม่เลย แต่ แชร์ kernel ของเครื่องจริง (host) ร่วมกัน container แต่ละตัวแค่แยกส่วน process, network และไฟล์ระบบออกจากกันเท่านั้น ทำให้เบากว่ามาก ใช้พื้นที่น้อยกว่า และเริ่มทำงานได้ในเสี้ยววินาทีแทนที่จะเป็นนาที

ตารางเปรียบเทียบ Docker vs Virtual Machine

หัวข้อDocker ContainerVirtual Machine
ขนาดเล็ก (มักหลัก MB)ใหญ่ (มักหลัก GB)
เวลาเริ่มทำงานเสี้ยววินาทีเป็นนาที
ใช้ OS ของตัวเองไหมไม่ แชร์ kernel กับ hostใช่ มี OS เต็มรูปแบบแยกต่างหาก
จำนวนที่รันพร้อมกันได้ในเครื่องเดียวมาก (หลักสิบถึงร้อย)น้อยกว่ามาก (จำกัดตามทรัพยากร)
ความปลอดภัยในการแยกตัวแยกในระดับ processแยกสมบูรณ์ในระดับฮาร์ดแวร์จำลอง

โดยสรุป Docker เหมาะกับงานที่ต้องการความเบาและเริ่มทำงานเร็ว ส่วน VM เหมาะกับงานที่ต้องการแยกตัวสมบูรณ์ระดับฮาร์ดแวร์ เช่น รันระบบปฏิบัติการคนละตัวกับ host จริงๆ (เช่น รัน Windows บนเครื่อง Mac)

ส่วนประกอบหลักของ Docker ที่ควรรู้

Dockerfile — ไฟล์ข้อความที่เขียนขั้นตอนสร้าง image ไว้ เช่น เริ่มจาก base image อะไร ติดตั้ง library อะไรบ้าง copy ไฟล์อะไรเข้าไป

Image — พิมพ์เขียวที่สร้างจาก Dockerfile ใช้สร้าง container ได้หลายตัว

Container — ของจริงที่รันขึ้นมาจาก image กำลังทำงานอยู่จริง

Docker Hub — เว็บไซต์ที่เก็บ image สาธารณะให้ดาวน์โหลดไปใช้ต่อ คล้าย GitHub แต่เก็บ image แทนที่จะเก็บโค้ด

Docker Compose — เครื่องมือช่วยจัดการหลาย container พร้อมกัน (เช่น container เว็บ + container ฐานข้อมูล) ผ่านไฟล์ config เดียว ไม่ต้องรันคำสั่งแยกทีละตัว

ประวัติย่อของ Docker

Docker เปิดตัวครั้งแรกในปี 2013 โดยบริษัท dotCloud (ภายหลังเปลี่ยนชื่อเป็น Docker, Inc.) แนวคิดเรื่อง container ไม่ใช่เรื่องใหม่ทั้งหมด เทคโนโลยีพื้นฐานอย่าง Linux namespaces และ cgroups ที่ Docker ใช้อยู่ก่อนแล้วในระบบปฏิบัติการ Linux แต่ Docker เป็นคนแรกๆ ที่ห่อเทคโนโลยีเหล่านี้ให้ใช้งานง่ายผ่านคำสั่งและไฟล์ config ที่เข้าใจง่าย ทำให้ container กลายเป็นเรื่องที่นักพัฒนาทั่วไปเข้าถึงได้ ไม่ใช่แค่ผู้เชี่ยวชาญระบบเท่านั้น

หลังเปิดตัวไม่นาน Docker ก็ได้รับความนิยมอย่างรวดเร็วจนกลายเป็นมาตรฐานโดยพฤตินัยของวงการ container ปัจจุบันแทบทุกแพลตฟอร์ม cloud รายใหญ่ (AWS, Google Cloud, Azure) รองรับการรัน Docker container เป็นบริการหลักอยู่แล้ว

เมื่อไหร่ควรใช้ VM แทน Docker

แม้ Docker จะเบาและเร็วกว่า ก็ไม่ได้แปลว่าต้องใช้แทน VM เสมอไป มีบางสถานการณ์ที่ VM ยังเหมาะกว่า

ต้องการรันระบบปฏิบัติการคนละตัวกับ host จริงๆ — เช่น ต้องการรัน Windows เต็มรูปแบบบนเครื่อง Mac หรือ Linux กรณีนี้ Docker ทำไม่ได้ เพราะ container แชร์ kernel กับ host เสมอ ต้องใช้ VM เท่านั้น

ต้องการความปลอดภัยแยกตัวสูงสุด — งานที่ต้องการแยกตัวจาก host แบบสมบูรณ์ในระดับฮาร์ดแวร์จำลอง (เช่น รันโค้ดที่ไม่น่าเชื่อถือจากแหล่งภายนอก) VM ให้การแยกตัวที่แน่นหนากว่า container ซึ่งยังแชร์ kernel เดียวกันอยู่

โดยทั่วไปงานพัฒนาเว็บแอปพลิเคชันหรือบริการทั่วไป Docker เพียงพอและเหมาะสมกว่ามาก ส่วน VM เก็บไว้ใช้เฉพาะกรณีพิเศษที่ต้องการคุณสมบัติที่ Docker ให้ไม่ได้เท่านั้น ในทางปฏิบัติหลายทีมเลือกใช้ทั้งสองแบบร่วมกัน คือรัน Docker container อยู่ภายใน VM อีกทีเพื่อได้ทั้งความเบาของ container และความปลอดภัยระดับฮาร์ดแวร์ของ VM ไปพร้อมกัน

ทำไมทีมพัฒนาซอฟต์แวร์ถึงนิยมใช้ Docker

Consistency ระหว่างเครื่อง — นักพัฒนาทุกคนในทีมใช้สภาพแวดล้อมเดียวกันเป๊ะ ไม่ว่าเครื่องส่วนตัวจะติดตั้งอะไรไว้ต่างกันแค่ไหน ลดปัญหาการถกเถียงว่า “ทำไมมันพังในเครื่องคุณ แต่ในเครื่องผมใช้ได้ปกติ” ไปได้เกือบทั้งหมด

Deploy ง่ายขึ้น — image เดียวกันที่ทดสอบในเครื่อง นักพัฒนาใช้ deploy ขึ้นเซิร์ฟเวอร์จริงได้ทันที ลดปัญหา “ทำงานในเครื่องได้ แต่พังตอน deploy” ซึ่งเป็นสาเหตุความเครียดอันดับต้นๆ ของทีมพัฒนาซอฟต์แวร์มาอย่างยาวนาน

เหมาะกับสถาปัตยกรรม microservices — ระบบใหญ่ที่แยกเป็นหลายบริการย่อย (microservices) แต่ละบริการรันเป็น container แยกกันได้ จัดการและ scale แต่ละส่วนอิสระจากกัน โดยไม่กระทบส่วนอื่นของระบบเวลาต้องอัปเดตหรือแก้ไขบริการใดบริการหนึ่ง

ประหยัดทรัพยากรเซิร์ฟเวอร์ — รัน container หลายตัวในเซิร์ฟเวอร์เดียวได้มากกว่ารัน VM หลายตัว เพราะแชร์ kernel ร่วมกัน ไม่ต้องจองทรัพยากรแยกเต็มชุดต่อหน่วย

เริ่มต้นใช้ Docker ยังไง

ถ้ายังไม่มี Docker ในเครื่อง ดูวิธีติดตั้ง Docker บน Windows 11 แบบละเอียด ได้เลย ครอบคลุมตั้งแต่เตรียม WSL2 ไปจนถึงทดสอบรัน container แรก พร้อมวิธีแก้ error ที่เจอบ่อยตอนติดตั้ง

คำถามที่พบบ่อย

Docker ฟรีไหม ฟรีสำหรับใช้งานส่วนตัว การศึกษา และองค์กรขนาดเล็ก ธุรกิจขนาดใหญ่กว่าเกณฑ์ที่กำหนดต้องสมัครแผนเสียเงิน ตรวจสอบเงื่อนไขล่าสุดได้จากหน้า pricing บนเว็บทางการก่อนใช้งานเชิงพาณิชย์

ต้องรู้ Linux ก่อนถึงจะใช้ Docker ได้ไหม ไม่จำเป็น แม้ Docker container ส่วนใหญ่รันบน Linux kernel ข้างใน แต่ผู้ใช้ทั่วไปไม่จำเป็นต้องเข้าใจ Linux ลึกซึ้ง Docker Desktop จัดการรายละเอียดพวกนี้ให้อัตโนมัติ โดยเฉพาะบน Windows และ Mac ที่ใช้ผ่าน WSL2 หรือ virtualization ที่ซ่อนอยู่เบื้องหลัง เรียนรู้คำสั่งพื้นฐานของ Docker ก็เพียงพอสำหรับเริ่มใช้งานจริงแล้ว

Docker กับ Kubernetes ต่างกันยังไง Docker ใช้สร้างและรัน container แต่ละตัว ส่วน Kubernetes เป็นเครื่องมือจัดการ container จำนวนมากพร้อมกันในระดับใหญ่ (เช่น สั่ง scale, restart อัตโนมัติเมื่อพัง, กระจาย load ระหว่างหลายเซิร์ฟเวอร์) มักใช้คู่กันในระบบที่มีขนาดใหญ่ระดับ production จริงจัง ไม่จำเป็นสำหรับโปรเจกต์เล็กหรือตอนเริ่มเรียนรู้ ควรเริ่มจากเข้าใจ Docker ให้แน่นก่อน แล้วค่อยศึกษา Kubernetes ทีหลังเมื่อระบบเริ่มใหญ่ขึ้นจริง

ข้อมูลใน container หายไหมถ้าลบ container ทิ้ง ขึ้นอยู่กับว่าเก็บข้อมูลไว้ที่ไหน ถ้าเก็บอยู่ในตัว container เอง ข้อมูลจะหายไปพร้อมกับ container ที่ถูกลบ แต่ถ้าใช้ volume แยกเก็บข้อมูลต่างหาก (แนวทางที่แนะนำสำหรับข้อมูลสำคัญ เช่น ฐานข้อมูล) ข้อมูลจะยังอยู่แม้ลบ container ทิ้งไปแล้วก็ตาม

Podman ต่างจาก Docker ยังไง Podman เป็นทางเลือกที่ทำงานคล้าย Docker มาก คำสั่งส่วนใหญ่ใช้แทนกันได้เกือบเป๊ะ ความต่างหลักคือ Podman ไม่ต้องมี daemon กลางทำงานอยู่ตลอดเวลาเหมือน Docker และเน้นเรื่องความปลอดภัยมากกว่าด้วยการรันแบบ rootless เป็นค่าเริ่มต้น สำหรับมือใหม่ Docker ยังคงเป็นตัวเลือกที่มีเอกสารและ community ใหญ่กว่ามาก แนะนำให้เริ่มจาก Docker ก่อน

สรุป

Docker คือเครื่องมือรันโปรแกรมภายใน container ที่เบา เร็ว และพกพาข้ามเครื่องได้ง่ายกว่า Virtual Machine มาก เพราะแชร์ kernel ของเครื่องจริงแทนที่จะจำลองฮาร์ดแวร์และ OS ทั้งชุดขึ้นมาใหม่

จุดสำคัญที่ต้องจำ

  • Docker แก้ปัญหา “it works on my machine” ด้วยการห่อโปรแกรมพร้อม dependency ทั้งหมดไว้ในที่เดียว
  • Container เบากว่า เร็วกว่า VM มาก เพราะไม่ต้องบูต OS ใหม่ทุกครั้ง
  • ส่วนประกอบหลักที่ควรรู้คือ Dockerfile, Image, Container, Docker Hub และ Docker Compose

เมื่อเข้าใจภาพรวมแล้ว ขั้นต่อไปคือติดตั้ง Docker และลองรัน container แรกด้วยตัวเองให้คุ้นมือ จะเห็นความแตกต่างจากการรันโปรแกรมแบบปกติได้ชัดเจนขึ้นมากหลังลองใช้งานจริงด้วยตัวเอง

1 thought on “Docker คืออะไร ต่างจาก Virtual Machine ยังไง”

Leave a Comment