Docker และ VM แตกต่างกันอย่างไร
Docker และ Virtual Machine (VM) เป็นสองเทคโนโลยีที่ใช้ในการปรับใช้แอปพลิเคชัน ในวงจรการพัฒนาซอฟต์แวร์ การปรับใช้จะเตรียมรหัสแอปพลิเคชันเพื่อเรียกใช้เพื่อผู้ใช้ปลายทางของคุณ 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 โดยการสร้างบัญชีวันนี้