Vagrant vs Docker: อะไรที่เหมาะกับคุณ? (สามารถเป็นได้ทั้งสองอย่าง)

เผยแพร่แล้ว: 2023-01-26

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

เครื่องมือสองอย่างคือ Vagrant และ Docker การทำความเข้าใจว่าพวกเขาทำอะไรและทำงานร่วมกันอย่างไรเป็นกุญแจสำคัญในการใช้ประโยชน์สูงสุดจากสภาพแวดล้อมระบบคลาวด์ของคุณ

Vagrant เป็นเครื่องมือสำหรับสร้างและจัดการสภาพแวดล้อมของเครื่องเสมือน (VM) ในเวิร์กโฟลว์เดียว ไม่ว่าคุณกำลังสร้าง VM ภายในเครื่องเพื่อรันด้วยไฮเปอร์ไวเซอร์หรือเพียง Cloud VMs Vagrant จัดเตรียมรูปแบบการกำหนดค่าที่สอดคล้องกัน, CLI เดียว และตัวจัดสรรที่ใช้ร่วมกันเพื่อติดตั้งซอฟต์แวร์และปรับเปลี่ยนการกำหนดค่า

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

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

นักเทียบท่าคืออะไร?

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

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

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

สกรีนช็อต: เว็บไซต์ Docker — Vagrant vs Docker
นักเทียบท่า

ทำไมต้องใช้นักเทียบท่า (เทียบกับคนจรจัด)

โดยทั่วไปแล้วทีม DevOps จะใช้ Docker เพื่อส่งมอบและเรียกใช้เว็บแอปพลิเคชัน รวมถึงแอปพลิเคชันบนคลาวด์ที่รวมเข้ากับคิวข้อความหรือโฮสต์บนแพลตฟอร์ม function-as-a-service (FaaS) ที่ตอบสนองต่อทริกเกอร์และเหตุการณ์บนคลาวด์

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

นักเทียบท่ายังสามารถแจกจ่ายและดำเนินการเครื่องมือที่ใช้ CLI ด้วยเครื่องมือบนคลาวด์ยอดนิยมทั้งหมดที่มีอิมเมจ Docker ที่ฝัง CLI ของพวกเขา

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

ประโยชน์ของนักเทียบท่าคืออะไร?

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

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

อิมเมจ Docker ง่ายต่อการเผยแพร่โดยใช้รีจิสตรีเช่น Docker Hub ทำให้ทีม DevOps สามารถแชร์อิมเมจระหว่างกันได้อย่างรวดเร็วและปรับใช้อิมเมจโดยใช้แพลตฟอร์มโฮสติ้งต่างๆ ตัวอย่างเช่น คุณจะพบ Docker ที่อยู่เบื้องหลังชุดพัฒนา DevKinsta WordPress ของ Kinsta

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

นักเทียบท่ายังได้รับการสนับสนุนเกือบเป็นสากลจากผู้ให้บริการคลาวด์รายใหญ่ ซึ่งหมายความว่าทีม DevOps มีตัวเลือกมากมายเมื่อเรียกใช้อิมเมจ Docker ในระบบคลาวด์

พเนจรคืออะไร?

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

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

Vagrant นำเสนอโซลูชันโดยสรุปความแตกต่างพื้นฐานระหว่างแพลตฟอร์ม VM ทำให้ทีม DevOps สามารถจัดเตรียม VM ใหม่ด้วย CLI เดียวและไวยากรณ์การกำหนดค่าที่สอดคล้องกัน ทีมที่ใช้ Vagrant สามารถสร้าง VM ที่สอดคล้องกัน ไม่ว่าพวกเขาจะทำงานในองค์กรหรือในสภาพแวดล้อมแบบคลาวด์ และสามารถสลับไปมาระหว่างสภาพแวดล้อมต่างๆ ได้อย่างง่ายดาย Vagrant มีการใช้งานที่แตกต่างกันมากมาย รวมถึงการแทนที่ MAMP (macOS, Apache, MySQL/MariaDB และ PHP, Perl หรือ Python)

สกรีนช็อต: เว็บไซต์ Vagrant — Vagrant vs Docker
พเนจร

ทำไมต้องใช้ Vagrant (เทียบกับนักเทียบท่า)

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

วิธีปฏิบัติที่ดีกว่าคือการทำให้กระบวนการที่จำเป็นในการกำหนดค่าเครื่องเสมือนเป็นไปโดยอัตโนมัติ Vagrant มีเครื่องมือเดียวสำหรับทำให้กระบวนการสร้าง VM เป็นไปโดยอัตโนมัติสำหรับผู้ให้บริการหลายราย Vagrant ยังมี VM คุณภาพสูงให้เลือกมากมายบน Vagrant Cloud ซึ่งทีม DevOps สามารถใช้เพื่อเริ่มต้น VM ของตนเองได้

คนจรจัดมีประโยชน์อย่างไร?

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

Vagrant ยังอนุญาตให้ทีม DevOps โยกย้ายไปยังระบบคลาวด์หรือระหว่างผู้ให้บริการโดยไม่ต้องออกแบบกระบวนการที่พวกเขาใช้เพื่อสร้าง VM ใหม่

VMs ที่สร้างโดย Vagrant ให้การแยกระดับสูง โดยมักจะใช้ประโยชน์จากการสนับสนุนการจำลองเสมือนแบบพิเศษที่สร้างขึ้นใน CPU สมัยใหม่ สิ่งนี้ทำให้ VM และเครื่องมือที่สร้างมันขึ้นมา เช่น Vagrant เป็นตัวเลือกที่ดีที่สุดโดยที่ความปลอดภัยและการแยกตัวมีความสำคัญสูง

ลินุกซ์หลายรุ่น เช่น Ubuntu และ Fedora มีกล่อง Vagrant ที่เป็นทางการซึ่งทีม DevOps สามารถสร้างได้ ซึ่งช่วยลดเวลาในการสร้าง VM แบบกำหนดเอง

แม้ว่า Docker และ Vagrant จะทำงานต่างกัน แต่คุณรู้หรือไม่ว่าคุณสามารถใช้คู่กันเพื่อให้บรรลุเป้าหมายได้ เรียนรู้เพิ่มเติมที่นี่: คลิกเพื่อทวีต

Vagrant vs Docker: ดูใกล้ ๆ

ทั้ง Vagrant และ Docker ทำให้ทีม DevOps มีประสิทธิภาพมากขึ้นด้วยการสร้าง แจกจ่าย และเรียกใช้แอปพลิเคชันซอฟต์แวร์โดยอัตโนมัติ

นักเทียบท่าบรรลุเป้าหมายนี้ด้วยรูปแบบบรรจุภัณฑ์ที่กำหนดเองในรูปแบบของรูปภาพและสภาพแวดล้อมการดำเนินการที่มีน้ำหนักเบาผ่านคอนเทนเนอร์ คอนเทนเนอร์ดำเนินการอย่างสม่ำเสมอระหว่างแพลตฟอร์ม ทำให้ทีม DevOps มีความมั่นใจมากขึ้นว่าซอฟต์แวร์ของตนทำงานได้ตามที่คาดไว้ นักเทียบท่าได้รับการสนับสนุนอย่างดีจากแพลตฟอร์มคลาวด์ PaaS และ FaaS ทำให้ทีม DevOps สามารถเลือกแพลตฟอร์มที่ดีที่สุดสำหรับความต้องการของตนได้

คอนเทนเนอร์จำนวนมากสามารถอยู่ร่วมกันบนโฮสต์เดียว โดยหลักแล้ว — แต่ไม่สมบูรณ์ — แยกออกจากกันในขณะที่แบ่งปันแหล่งทรัพยากรเดียวกัน สิ่งนี้ทำให้คอนเทนเนอร์ปรับขนาดได้อย่างมีประสิทธิภาพ

Vagrant บรรลุเป้าหมายนี้ด้วยการจัดหาวิธีการที่สอดคล้องกันในการสร้าง VM กับผู้ให้บริการที่มีอยู่ เป็นตัวเลือกที่เหมาะสำหรับทีมที่ลงทุนใน VM อยู่แล้ว โดยพึ่งพาการแยก การรักษาความปลอดภัย การควบคุม และการปรับแต่งในระดับสูง

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

Vagrant และ Docker ไม่ใช่เทคโนโลยีพิเศษร่วมกัน และเครื่องมือทั้งสองสามารถใช้คู่กันได้ ตัวอย่างเช่น ทีม DevOps อาจใช้ Docker เพื่อพัฒนาและรันแอปพลิเคชัน ในขณะที่ใช้ Vagrant เพื่อสร้างสภาพแวดล้อมเฉพาะเพื่อจำลองปัญหา นักเทียบท่าอาจทำงานภายใน VM ที่สร้างโดย Vagrant ซึ่งอาจทดสอบเวอร์ชันใหม่ของ Docker หรือทดสอบเครื่องมือที่กระจายเป็นอิมเมจนักเทียบท่าในสภาพแวดล้อมที่แยกจากกัน

สรุป

ทีม DevOps มีตัวเลือกมากมายเมื่อสร้าง แจกจ่าย และเรียกใช้แอปพลิเคชัน

Docker จัดเตรียมรูปแบบอิมเมจแบบกำหนดเองและสภาพแวดล้อมการดำเนินการคอนเทนเนอร์ที่อนุญาตให้ใช้ทรัพยากรขนาดใหญ่และมีประสิทธิภาพและได้รับการสนับสนุนในแพลตฟอร์ม PaaS และ FaaS

VM นำเสนอสภาพแวดล้อมการดำเนินการที่ปลอดภัยและแยกจากผู้ให้บริการระบบคลาวด์และ VM ภายในองค์กรจำนวนมาก โดย Vagrant ได้รวบรวมความแตกต่างมากมายเพื่อมอบ CLI เดียวและไวยากรณ์การกำหนดค่าที่สอดคล้องกันเพื่อสร้างอินสแตนซ์ VM ข้ามผู้ให้บริการ

ก่อนที่คุณจะเริ่มพัฒนาแอปต่อไป ลองดูว่าบริการ Application Hosting ของ Kinsta สามารถใช้ประโยชน์จาก Dockerfiles เพื่อจัดการการปรับใช้โค้ดของคุณได้อย่างไร