Docker และ VM แตกต่างกันอย่างไร

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

อ่านเกี่ยวกับ Docker »

การจำลองระบบเสมือน: Docker เทียบกับเครื่องเสมือน

การจำลองระบบเสมือนช่วยให้สามารถสร้างอินสแตนซ์เสมือนของทรัพยากรในชีวิตจริง เช่น เซิร์ฟเวอร์และเครือข่าย ในการประมวลผล การจำลองระบบเสมือนช่วยให้อินสแตนซ์แยกหลายรายการของส่วนประกอบที่จำลองระบบเสมือนทำงานบนส่วนประกอบในชีวิตจริงได้

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

เครื่องเสมือน

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

เครื่องเสมือนทำให้เทคโนโลยีคลาวด์เป็นไปได้ และใน Amazon Web Services (AWS) เครื่องเสมือนเรียกว่าอินสแตนซ์ อินสแตนซ์ระบบคลาวด์เหล่านี้เป็นเจ้าของและดูแลโดย AWS และใช้งานได้ผ่าน API

อ่านเกี่ยวกับอินสแตนซ์ระบบคลาวด์ »

Docker

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

คอนเทนเนอร์ Docker มีระบบไฟล์ โครงสร้างการขึ้นต่อกัน กระบวนการ และความสามารถของเครือข่ายเป็นของตนเอง แอปพลิเคชันมีทุกสิ่งที่จำเป็นภายในคอนเทนเนอร์และสามารถทำงานได้ทุกที่ เทคโนโลยีคอนเทนเนอร์ Docker ใช้ทรัพยากรเคอร์เนลของระบบปฏิบัติการโฮสต์โดยตรง 

อะไรคือความคล้ายคลึงกันอื่นๆ ระหว่าง Docker และเครื่องเสมือน

เนื่องจากเทคโนโลยีการจำลองระบบเสมือน Docker และ Virtual Machine (VM) มีความคล้ายคลึงกันบางประการ

ภาพ

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

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

การจัดเวอร์ชัน

ทั้งภาพคอนเทนเนอร์ Docker และอภาพเครื่องเสมือนสามารถกำหนดเวอร์ชันเพื่อติดตามการเปลี่ยนแปลงการกำหนดค่าสภาพแวดล้อมเมื่อเวลาผ่านไป

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

ในทำนองเดียวกัน การกำหนดเวอร์ชันในเครื่องเสมือนหมายถึงกระบวนการติดตามและจัดการการเปลี่ยนแปลงภาพของเครื่องเสมือนเมื่อเวลาผ่านไป การกำหนดเวอร์ชันเครื่องเสมือนจะติดตามการเปลี่ยนแปลง เช่น การอัปเดตและแพตช์ ของฮาร์ดแวร์เสมือนหรือการกำหนดค่าระบบปฏิบัติการ

ความสามารถในการเคลื่อนย้าย

ทั้งเครื่องเสมือนและ Docker ได้รับการออกแบบมาเพื่อตอบสนองความยุ่งยากในการพัฒนาการกำหนดค่าแอปพลิเคชันที่แตกต่างกันสำหรับสถาปัตยกรรมพื้นฐานประเภทต่างๆ แม้ว่าพวกเขาจะใช้วิธีการที่แตกต่างกันเพื่อรับมือกับความท้าทาย แต่ภาพของ Docker และ VM นั้นสามารถพกพาได้สูงในสถาปัตยกรรมต่างๆ ไม่ว่าจะอยู่ในองค์กรหรือในระบบคลาวด์ 

ความแตกต่างที่สำคัญ: Docker เทียบกับเครื่องเสมือน

ทั้ง Virtual Machine (VM) และ Docker จัดการกับความท้าทายในการเรียกใช้แอปพลิเคชันในสภาพแวดล้อมที่แตกต่างกัน แต่พวกเขาทำเช่นนั้นด้วยเหตุผลที่แตกต่างกันเล็กน้อยและด้วยวิธีการที่แตกต่างกัน

วัตถุประสงค์

เดิมทีเครื่องเสมือนได้รับการออกแบบมาเพื่อให้ระบบปฏิบัติการหลายระบบทำงานบนเครื่องจริงเครื่องเดียว วัตถุประสงค์คือเพื่อให้ผู้ใช้สร้างสภาพแวดล้อมเสมือนจริงที่แยกออกจากฮาร์ดแวร์พื้นฐาน รายละเอียดย่อฮาร์ดแวร์ของ VM เพื่อให้ง่ายต่อการเรียกใช้แอปพลิเคชันบนสถาปัตยกรรมฮาร์ดแวร์ที่แตกต่างกัน และใช้ทรัพยากรฮาร์ดแวร์ได้อย่างมีประสิทธิภาพมากขึ้น

ในทางกลับกัน Docker ได้รับการออกแบบมาเพื่อให้มีน้ำหนักเบาและพกพาได้ในการบรรจุและเรียกใช้แอปพลิเคชันในสภาพแวดล้อมที่แยกจากกันและทำซ้ำได้ Docker สรุปรายละเอียดระบบปฏิบัติการเพื่อจัดการกับความท้าทายในการปรับใช้แอปพลิเคชันในสภาพแวดล้อมต่างๆ เช่น การพัฒนา การทดสอบ และการผลิต การจัดการการอัปเดตสภาพแวดล้อมของซอฟต์แวร์และรักษาความสอดคล้องของสภาพแวดล้อมในทุกที่อาจเป็นเรื่องที่ท้าทายมาก โดยเฉพาะอย่างยิ่งสำหรับองค์กรที่เรียกใช้แอปพลิเคชันหลายร้อยรายการหรือแยกย่อยแอปพลิเคชันเป็นไมโครเซอร์วิสหลายร้อยรายการ Docker แก้ไขปัญหานี้ผ่านการรวมในคอนเทนเนอร์ 

ผลิตภัณฑ์สุดท้าย

Docker คือชื่อของแพลตฟอร์มคอนเทนเนอร์โอเพนซอร์สที่บริษัท Docker เป็นเจ้าของและดำเนินการ มีแพลตฟอร์มทางเลือกเช่น Podman แม้ว่าพวกเขาจะได้รับความนิยมน้อยกว่ามาก Docker มีความหมายเหมือนกันกับการรวมในคอนเทนเนอร์ คอนเทนเนอร์เป็นอาร์ทิแฟกต์ซึ่งเป็นส่วนที่ใช้งานได้สำหรับผู้ใช้ปลายทาง

เครื่องเสมือนเป็นส่วนที่ใช้งานได้สำหรับผู้ใช้ปลายทาง เทคโนโลยีไม่เกี่ยวข้องกับแบรนด์ใดแบรนด์หนึ่ง คุณสามารถปรับใช้ VM ในศูนย์ข้อมูลในองค์กรหรือเข้าถึงผ่าน API เป็นบริการคลาวด์ที่มีการจัดการ

สถาปัตยกรรม

เครื่องเสมือนเรียกใช้เคอร์เนลและระบบปฏิบัติการโฮสต์ของตนเอง พร้อมด้วยแอปพลิเคชันและการอ้างอิง เช่น ไลบรารีและไฟล์ไบนารีอื่นๆ ไฮเปอร์ไวเซอร์ประสานงานระหว่างฮาร์ดแวร์ (เครื่องโฮสต์หรือเซิร์ฟเวอร์) และเครื่องเสมือน โดยจะจัดสรรทรัพยากรฮาร์ดแวร์ทางกายภาพที่ระบุไว้ในระหว่างการสร้างอินสแตนซ์ไปยังเครื่องเสมือนสำหรับการใช้งานเฉพาะ เครื่องเสมือนหลายเครื่องสามารถมีอยู่ในเซิร์ฟเวอร์ทรงพลังเครื่องเดียว จัดการโดยไฮเปอร์ไวเซอร์เครื่องเดียว โดยมีแอปพลิเคชันหลายร้อยเครื่องที่ทำงานบนเครื่องเสมือนแต่ละเครื่อง

คอนเทนเนอร์ Docker มีเฉพาะการอ้างอิงเท่านั้น ซอฟต์แวร์ Docker Engine ขับเคลื่อนการจำลองระบบเสมือนใน Docker ให้การประสานงานระหว่างคอนเทนเนอร์ที่ใช้งานอยู่และระบบปฏิบัติการพื้นฐาน ไม่ว่าจะเป็นเครื่องจริงหรือเครื่องเสมือน

สำหรับการจัดการการจำลองระบบเสมือนขั้นสูงเพิ่มเติมด้วย Docker ให้ใช้ Kubernetes สำหรับข้อมูลเพิ่มเติม โปรดอ่าน Kubernetes และ Docker แตกต่างกันอย่างไร

การแบ่งปันทรัพยากร

ทั้งเครื่องเสมือนและคอนเทนเนอร์ Docker ใช้การส่งทรัพยากรหลายทาง หรือการแบ่งปันทรัพยากรระหว่างอินสแตนซ์เสมือนจริง

เครื่องเสมือนขอทรัพยากรล่วงหน้าจำนวนหนึ่งจากฮาร์ดแวร์และยังคงใช้ปริมาณนั้นอย่างต่อเนื่องตราบเท่าที่เครื่องเสมือนยังทำงานอยู่ 

ในทางกลับกัน คอนเทนเนอร์ Docker ใช้ทรัพยากรตามความต้องการ แทนที่จะขอทรัพยากรฮาร์ดแวร์จริงตามจำนวนที่กำหนดเหมือนที่เครื่องเสมือนทำ พวกเขาเพียงแค่ขอสิ่งที่ต้องการจากเคอร์เนลของระบบปฏิบัติการเดียว หลายคอนเทนเนอร์ใช้ระบบปฏิบัติการเดียวกันร่วมกัน คอนเทนเนอร์ Docker จะแบ่งปันทรัพยากรโดยตรงกับลีดเคอร์เนล และอาจใช้ทรัพยากรระบบน้อยกว่าเมื่อเทียบกับ VM 

การรักษาความปลอดภัย

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

ในทางกลับกัน เนื่องจาก VM เรียกใช้ระบบปฏิบัติการทั้งหมด จึงมีการแยกระดับที่เพิ่มขึ้นเมื่อเรียกใช้แอปพลิเคชัน VM ให้ความปลอดภัยที่สูงขึ้นตราบเท่าที่ระบบปฏิบัติการมีมาตรการรักษาความปลอดภัยที่เข้มงวด

เมื่อใช้: Docker เทียบกับเครื่องเสมือน

คอนเทนเนอร์ Docker ทำงานบนสถาปัตยกรรม Linux และต้องการคุณสมบัติเฉพาะเคอร์เนลของ Linux เช่น เนมสเปซและกลุ่มควบคุม (cgroups) นักพัฒนามักจะเรียกใช้แพลตฟอร์ม Docker บนเครื่องเสมือนที่ใช้ Linux โค้ดแอปพลิเคชันแพ็คเกจ Docker ลงในคอนเทนเนอร์ที่ทำงานได้ทุกที่ การอัปเดตสภาพแวดล้อมจะทำเพียงครั้งเดียวในคอนเทนเนอร์ คุณไม่จำเป็นต้องอัปเดตสภาพแวดล้อมแอปพลิเคชันของคุณ 

ตัวอย่างเช่น คุณสามารถเร่งอินสแตนซ์ใน AWS และโหลดทันทีด้วย Amazon Machine Image (AMI) ที่กำหนดค่าไว้ล่วงหน้าด้วย Docker 

 

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

เมื่อใดควรใช้เครื่องเสมือน

วิธีที่ดีที่สุดคือใช้เครื่องเสมือนหากคุณใช้งานแอปพลิเคชันที่มีข้อกำหนดเหล่านี้คือ 

  • การพึ่งพาเฉพาะระบบปฏิบัติการ
  • ความต้องการทรัพยากรฮาร์ดแวร์ที่สำคัญ
  • จำเป็นต้องตั้งค่าการควบคุมต่างๆ ในระบบปฏิบัติการ
  • แอปพลิเคชันรุ่นล้าสมัยที่ไม่ได้ทำงานบนระบบปฏิบัติการสมัยใหม่อีกต่อไป
  • ความต้องการของระบบปฏิบัติการที่แตกต่างกันโดยมีโครงสร้างพื้นฐานทางกายภาพพื้นฐานเดียวที่พร้อมใช้งาน

เมื่อใดที่ควรใช้ Docker

วิธีที่ดีที่สุดคือใช้ Docker เมื่อคุณเรียกใช้แอปพลิเคชันที่มีข้อกำหนดเหล่านี้ 

  • ความต้องการทรัพยากรที่มีน้ำหนักเบาหรือสถาปัตยกรรมไมโครเซอร์วิส
  • สภาพแวดล้อมโครงสร้างพื้นฐานแบบกระจาย รวมถึงเซิร์ฟเวอร์บนระบบคลาวด์
  • รอบการปรับใช้ที่รวดเร็ว (เนื่องจากไฟล์ Dockerfiles สามารถจัดการได้ง่ายกว่าการกำหนดค่า VM)
  • ความต้องการความสามารถในการปรับขนาดอย่างรวดเร็ว

สรุปความแตกต่าง: Docker เทียบกับ VM

 

คอนเทนเนอร์ Docker

VM

คืออะไร

Docker เป็นแพลตฟอร์มซอฟต์แวร์สำหรับสร้างและเรียกใช้คอนเทนเนอร์ Docker คอนเทนเนอร์ Docker เป็นการจำลองอินสแตนซ์พื้นที่ผู้ใช้ ซึ่งเป็นส่วนหนึ่งของระบบปฏิบัติการที่กระบวนการของผู้ใช้เรียกใช้

การจำลองเครื่องจริง–รวมถึงฮาร์ดแวร์เสมือนจริง–ที่เรียกใช้ระบบปฏิบัติการ

การจำลองระบบเสมือน

คอนเทนเนอร์ย่อรายละเอียดของระบบปฏิบัติการจากรหัสแอปพลิเคชัน

VM ย่อรายละเอียดฮาร์ดแวร์จากรหัสแอปพลิเคชัน

วัตถุประสงค์

ย่อรายละเอียดฮาร์ดแวร์และเพิ่มการใช้งานฮาร์ดแวร์

ปรับปรุงการจัดการสภาพแวดล้อมของแอปพลิเคชันและทำให้สอดคล้องกันในหลายสภาพแวดล้อม

จัดการโดย

Docker Engine ประสานงานระหว่างระบบปฏิบัติการและคอนเทนเนอร์ Docker

ไฮเปอร์ไวเซอร์ประสานงานระหว่างฮาร์ดแวร์จริงของเครื่องและเครื่องเสมือน

สถาปัตยกรรม

แบ่งปันทรัพยากรกับเคอร์เนลโฮสต์พื้นฐาน

เรียกใช้เคอร์เนลและระบบปฏิบัติการของตัวเอง

การแบ่งปันทรัพยากร

ตามความต้องการ

จำนวนเงินคงที่ซึ่งกำหนดไว้ในข้อกำหนดการกำหนดค่าของภาพเครื่องเสมือน

AWS จะรองรับข้อกำหนดการปรับใช้แอปพลิเคชันของคุณได้อย่างไร

Amazon Web Services (AWS) มีบริการต่างๆ ที่ออกแบบมาเฉพาะสำหรับ Virtual Machine (VM) และการจัดการ Docker คือ

  • Amazon Elastic Cloud Compute (Amazon EC2) มีอินสแตนซ์ที่ปลอดภัย เชื่อถือได้ และปรับขนาดได้มากกว่า 600 ประเภท เมื่อโหลดเทมเพลต Amazon Machine Image (AMI) คุณสามารถมีเซิร์ฟเวอร์สภาพแวดล้อมการพัฒนา การทดสอบ หรือการใช้งานจริงที่ระบุอย่างครบถ้วนพร้อมใช้งานในไม่กี่นาที
  • Amazon Elastic Container Service (Amazon ECS) คือบริการการควบคุมระบบคอนเทนเนอร์ที่มีการจัดการอย่างเต็มรูปแบบ ซึ่งช่วยให้คุณปรับใช้ และปรับขนาดแอปพลิเคชันที่มีการคอนเทนเนอร์ได้อย่างง่ายดาย ลูกค้าสามารถกำหนดค่าคอนเทนเนอร์อินสแตนซ์ของตนเพื่อเข้าถึงรีจิสตรี Docker Image ส่วนตัวภายใน Virtual Private Cloud (VPC) หรือรีจิสตรีที่เข้าถึงได้ภายนอก VPC
  • Amazon Elastic Container Registry (Amazon ECR) ช่วยให้คุณเก็บ แชร์ และปรับใช้คอนเทนเนอร์ของคุณได้ทุกที่อย่างง่ายดาย Amazon ECR ผสานรวมกับอินเทอร์เฟซบรรทัดคำสั่ง (CLI) ของ Docker เพื่อลดความซับซ้อนของขั้นตอนการพัฒนาและการผลิตของคุณ ตัวอย่างเช่น คุณสามารถพุชภาพคอนเทนเนอร์ของคุณไปยัง Amazon ECR โดยใช้ Docker CLI จากเครื่องพัฒนาของคุณ และเครื่องมือควบคุมระบบคอนเทนเนอร์ของ Amazon สามารถดึงมาปรับใช้ในการผลิตได้โดยตรง
  • AWS Fargate เป็นบริการแบบไม่ต้องใช้เซิร์ฟเวอร์ที่ให้คุณปรับใช้และจัดการคอนเทนเนอร์โดยไม่จำเป็นต้องจัดการเซิร์ฟเวอร์จริงหรือเครื่องเสมือน

เริ่มต้นใช้งานการพัฒนาแอปพลิเคชันของคุณบน AWS โดยการสร้างบัญชีวันนี้