เหตุใดฉันจึงควรใช้ Vagrant แทนที่จะเป็น VirtualBox


230

ฉันใช้ VirtualBox มาหลายปีเพื่อสร้างสภาพแวดล้อมการพัฒนา

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

ด้วย VirtualBox ฉันติดตั้งและกำหนดค่าสภาพแวดล้อมได้อย่างสมบูรณ์แบบจากนั้นฉันสามารถจัดแพคเกจให้เป็น OVA หรืออะไรก็ได้แล้วแชร์กับผู้ใช้สำนักงานคนอื่น ๆ คุณสามารถถ่ายภาพใน VirtualBox หากมีสิ่งผิดปกติ

หุ่นและพ่อครัวไม่ได้เป็นส่วนหนึ่งของ Vagrant จริง ๆ พวกมันเป็นของตัวเองใช่มั้ย

ใช่แล้วประโยชน์ที่ Vagrant มอบให้กับ VirtualBox เป็นของตัวเองโดยเฉพาะ


11
สองปีที่ฉันใช้ Vagrant ทุกวันเพื่อการพัฒนา - ยอดเยี่ยมมาก! ทีมของฉันใช้มันและแก้ไขปัญหาสภาพแวดล้อม dev ของเรา
John Hunt

1
มีความเห็นที่นี่: หากคุณไม่เคยมีปัญหาในการตั้งค่าเซิร์ฟเวอร์ PXE รู้ VBoxManage ด้วยใจรู้วิธีการตั้งค่า nfs ในเวลาไม่ถึงนาที ฯลฯ และยังชอบการจัดการเครือข่ายการสร้างโดยตรง .. ไม่มีจุดใดเลย มูลค่าจะเพิ่มขึ้นตามแต่ละส่วนของปริศนาที่คุณขาดไป การใช้อย่างแพร่หลายไม่ได้มาจากการผนวกรวมของหุ่นเชิด แต่เป็นเพราะผู้คนสามารถเจาะภาพความปลอดภัยจากอินเทอร์เน็ตได้ ไม่ว่าพวกเขาจะบอกอะไรคุณ
Florian Heigl

2
3.5 ปีและตอนนี้ฉันใช้นักเทียบท่าทุกวันเพื่อการพัฒนา เป็นเรื่องที่ดี แต่สัตว์ร้ายที่แตกต่างสำหรับคนพเนจร ... ขึ้นอยู่กับความต้องการของคุณฉันเชื่อว่าคนจรจัดยังคงเป็นแพลตฟอร์มการพัฒนาที่ดีกว่าสำหรับทีม - มันง่ายกว่ามากที่จะทำงานกับ
จอห์นฮันท์

5
4 ปีและฉันได้ค้นพบนักเทียบท่ามันแย่มาก Long Vagrant สด
John Hunt เมื่อ

3
ความคิดเห็นของคุณกำลังเพิ่มความสนุกมากขึ้น
ฟลอเรียนเฮ

คำตอบ:


151

นี่เป็นคำถามใหญ่ดังนั้นฉันจะแยกมันออกเป็นสามส่วน

คนจรจัด

Vagrant ใช้เพื่อตั้งค่าเครื่องเสมือนหนึ่งเครื่องขึ้นไปโดย:

  • การนำเข้ารูปภาพที่สร้างไว้ล่วงหน้า (เรียกว่า "กล่อง")
  • การตั้งค่าเฉพาะ VM (ที่อยู่ IP, ชื่อโฮสต์, การส่งต่อพอร์ต, หน่วยความจำ ฯลฯ )
  • ใช้งานซอฟต์แวร์การจัดสรรเช่น Puppet หรือ Chef

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

นี่คือเหตุผลบางอย่างที่ฉันเคยเห็นสำหรับการใช้ Vagrant ผ่าน VirtualBox

1. ตั้งค่าเครือข่าย Multi-VM ได้อย่างง่ายดาย

เนื้อหาของผู้ใช้พลังงาน Vagrant ส่วนใหญ่ที่ฉันได้อ่านเกี่ยวกับการตั้งค่า VM หลายเครื่องในเวลาเดียวกัน Vagrant ให้ไฟล์กำหนดค่าเดียวสำหรับคุณในการตั้งค่าเหล่านี้ทำให้คุณสามารถเรียกใช้งานได้ทั้งหมดด้วยคำสั่งเดียว

สมมติว่าคุณได้กำหนดค่า VMs สามตัวให้กับเครือข่ายโดยใช้ IP แบบคงที่ในเครือข่ายย่อย 192.168.1. * คุณพบว่าตัวเองอยู่ในตำแหน่งที่ใช้ซับเน็ตนั้นเพื่อแจกที่อยู่ IP และ VM ของคุณขัดแย้งกัน ด้วย Vagrant คุณสามารถแก้ไข Vagrantfile และโหลด VM ใหม่ได้ในขณะที่ VirtualBox คุณจะต้องเปิดการตั้งค่าสำหรับแต่ละ VM หากไม่บู๊ตแต่ละ VM และเปลี่ยนแปลงภายใน

2. การควบคุมแหล่งที่มา

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

3. แพลตฟอร์มที่หลากหลาย

มีจำนวนมากของกล่องที่มีอยู่ในเว็บไซต์เช่นเป็นhttp://vagrantbox.es สิ่งนี้ช่วยให้คุณสามารถลองใช้ OS หรือดิสทริบิวชันต่าง ๆ โดยใช้การเตรียมการเดียวกันเพื่อตั้งค่าสภาพแวดล้อมที่คล้ายคลึงกัน สิ่งนี้สามารถช่วยในการทดสอบหรือเพิ่มการรองรับแพลตฟอร์มใหม่และใช้เวลานานโดยใช้เพียง VirtualBox

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


8
ถึงกระนั้นฉันไม่เข้าใจว่าทำไมฉันจึงควรใช้คนจรจัดในสภาพแวดล้อมการพัฒนา! เพราะมันมีราคาแพง (ถ้าคุณต้องการใช้ VMWare!) เราสามารถเตรียมเครื่องเสมือนเช่นกล่องฐานที่คนจรจัดใช้แล้วรับโคลนโดย VMware เพื่อตั้งค่าเครื่องเสมือนอื่น ก่อนอื่นเราสามารถควบคุมการตั้งค่าเครื่องเสมือนทั้งหมดโดยvmrunคำสั่งที่เสนอโดย VMware แม้แต่การเปลี่ยนที่อยู่ IP หรือการเรียกใช้สคริปต์ภายในเครื่องแขก!
OğuzÇelikdemir

3
@ OğuzÇelikdemirนั่นเป็นจุดที่ยุติธรรม Vagrant ทำให้ส่วนหน้าของ VMWare ง่ายขึ้นด้วยการคำนึงถึงการนำเครื่องขึ้นมาใหม่ เบื้องหลังมันใช้vmrunเพื่อควบคุมมัน ฉันใช้ VirtualBox มาตลอดและไม่มีประสบการณ์กับแบ็คเอนด์ VMWare
Adam Lukens

1
@ AdamLukens ขอขอบคุณสำหรับความคิดเห็นโดยละเอียด สิ่งที่คุณพูดถึงฟังดูน่าสนใจ .. แต่ฉันสงสัยว่าคุณรู้ตัวVboxManageหรือไม่? virtualbox.org/manual/ch08.html ทุกอย่างที่คุณกล่าวถึงสามารถสร้างเป็นสคริปต์ได้โดยส่งผ่าน ip / พารามิเตอร์เฉพาะvboxmanage controlvmหรือคำสั่งที่คล้ายกันในเชลล์สคริปต์แล้วจึงควบคุมเวอร์ชันนั้น .. จะvagrantปรับปรุงได้virtualboxอย่างไร
alpha_989

@ alpha_989 ฉันเห็นด้วย ดูเหมือนจะไม่มีจุดเฉพาะสำหรับการใช้ Vagrant เพียงเพื่อความสะดวก
Niklas Rosencrantz

27

นอกจากคำตอบที่ยอดเยี่ยมของอดัมแล้ว Vagrant ยังเชื่อมโยงทุกอย่างเข้าด้วยกัน แม้ว่าเชฟและหุ่นกระบอก (และเกลือและเชลล์สคริปต์และสิ่ง Provisioner อื่น ๆ ที่คุณต้องการใช้) vagrant upเป็นสิ่งที่แยกจากกันจรจัดผูกไว้ด้วยกันและทำให้การทำงานมีเพียง

ที่หนึ่งคำสั่งจะ

  1. เพิ่งเริ่ม VM ถ้านั่นคือทั้งหมดที่จำเป็น แต่มันจะยัง
  2. สร้างกล่องจากกล่องฐานที่คุณระบุถ้ายังไม่ได้ทำ แต่ถ้าคุณยังไม่มีกล่องฐานในเครื่องของคุณมันจะก่อน
  3. ดึงจาก URL และดาวน์โหลดไปยังเครื่องของคุณ

คุณไม่ต้องคิดทั้งหมด สมมติว่าคุณกำลังเปลี่ยนไปใช้โครงการอื่นซึ่งเริ่มโดยผู้ร่วมงาน คุณเพียงแค่เช็คเอาต์รหัสจาก repo ของคุณและเรียกใช้vagrant upโดยไม่ต้องกังวลกับการดาวน์โหลด ISO หรือติดตั้งอะไรหรือสงสัยว่าคุณต้องการใช้ distro เวอร์ชันใดสำหรับไคลเอนต์นั้นหรือว่าคุณมีสำเนาของ VM ที่มีทุกอย่างอยู่แล้ว คุณต้องการ.

คุณไม่จำเป็นต้องกังวลว่าพวกเขาจะตั้งค่าโดยใช้ Chef หรือ Puppet หรือเพียงแค่สคริปต์เชลล์ (โอเคดังนั้นคุณอาจจำเป็นต้องทำอย่างใดอย่างหนึ่งbundle installหรือตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งทุกอย่างแล้ว แต่ยังไม่ใช่เรื่องใหญ่อะไร)

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


8
แต่มันเป็นนรกที่ง่ายและเร็วกว่ามากสำหรับฉันในการส่งรูป VM ล่วงหน้าที่นักพัฒนาตั้งไว้ให้พวกเขาติดตั้งคนจรจัดเรียนรู้วิธีใช้และจัดการกับปัญหามากมายที่เกิดขึ้นโดยเฉพาะอย่างยิ่งเมื่อสนับสนุน หน้าต่างกล่อง ฉันแค่ไม่ได้รับมันเช่นกัน ดูเหมือนจะไม่มีอะไรนอกจากแฟนบอย
hopeeekr

5
การติดตั้ง Vagrant เป็นเรื่องง่ายอย่างไม่น่าเชื่อในวันนี้ ใครก็ตามที่ไม่สามารถติดตั้งได้จะไม่สามารถเชื่อถือได้ในการเขียนรหัส การมี Vagrantfile ในซอร์สโค้ดของคุณที่นักพัฒนาเช็คเอาต์นั้นง่ายกว่าการส่ง VM Vagrantfile กำหนดการตั้งค่ารวมถึง URL ที่ใช้ในการดาวน์โหลด VM พื้นฐาน (ซึ่งจะเป็นการกำหนดค่า) หากคุณไม่จำเป็นต้องทำการเปลี่ยนแปลงการกำหนดค่าเริ่มต้นคุณก็พร้อมแล้ว แต่เมื่อคุณทำงานในโครงการของคุณคุณอาจต้องทำการเปลี่ยนแปลง ทำเช่นนั้นใน Vagrantfile ของคุณ
iconoclast

5
เนื่องจากคุณกำลังรักษา Vagrantfile ด้วยรหัสของคุณนักพัฒนาทั้งหมดที่เข้าร่วมโครงการจะได้รับการเปลี่ยนแปลงที่คุณทำกับ VM ของคุณโดยอัตโนมัติเนื่องจากคุณกำลังทำให้พวกเขาอยู่ใน Vagrantfile การกำหนดค่า Vagrantfile ของคุณไม่จำเป็นต้องยุ่งยาก คุณสามารถใช้การจัดสรรเชลล์ได้หากคุณพบว่า Chef และ Puppet เป็นแบบ overkill (ซึ่งมักจะเป็น) หากคุณสามารถป้อนคำสั่งเชลล์ใน VM ได้มันเป็นอุปสรรค์เล็ก ๆ ในการตั้งค่าคำสั่งการจัดสรรเชลล์ใน Vagrantfile มันจะใช้ความพยายามเล็กน้อยล่วงหน้าและช่วยให้คุณประหยัดอาการปวดหัวในระยะยาว
iconoclast

4
และเมื่อคุณต้องการเปลี่ยนแปลงบางอย่างในคอมพิวเตอร์ทั้ง 50 เครื่อง
iconoclast

4
การสนทนาที่นี่เป็นเรื่องเกี่ยวกับการปรับให้เหมาะสมก่อนเวลาจริง ๆ อย่าใช้คนจรจัดถ้าคุณไม่ต้องการมัน ใช้คนจรจัดเมื่อคุณพบว่าการสร้าง VM กลายเป็นเรื่องน่าเบื่อ
cammil

9

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

หากต้องการตั้งคำถามที่ดีกว่า (โพสต์โดยผู้ใช้เชฟที่มีความเชี่ยวชาญ) อาจเป็นเพราะเหตุใดจึงใช้ Vagrant และไม่มีดกับปลั๊กอินที่เหมาะสม (จะไปที่ปลั๊กอิน Virtualbox ทันที) ตัวอย่างเช่นการส่งค่าอาร์กิวเมนต์ที่เก็บไว้ในถุงข้อมูลไปยังปลั๊กอินของมีดคือ (วิธี) ฉลาดกว่ามีความยืดหยุ่นและจัดการได้ง่ายกว่าการเล่น Vagrantfile ยักษ์หนึ่งตัว ฉันมักจะกำหนดทรัพยากร 'ไดนามิก' ของฉันเช่น # ของ CPU จำนวนหน่วยความจำซึ่งระบบปฏิบัติการที่จะปรับใช้ชื่อโฮสต์ IP เส้นทาง ฯลฯ ใน Chef databag (s) ที่ฉันไม่ต้องการเปลี่ยนแปลงสูตรของฉัน - ) การแก้ไข databag ผ่านเว็บอินเตอร์เฟสของ Chef เป็นงานป้อนข้อมูลที่ง่ายมากที่ฉันสามารถมอบให้กับผู้ให้บริการส่วนใหญ่ ด้วย Vagrantfile รหัสปรับเปลี่ยนตลอดกาลของคุณและเชื่อหรือไม่ - ตัวแบ่งรหัส - ซึ่งรับประกันได้ว่าคุณจะไม่ได้รับการเปลี่ยนแปลงอย่างง่ายจากเจ้าหน้าที่ฝ่ายปฏิบัติการ

นอกเหนือจากมีดจริง ๆ แล้วยังไม่มีปลั๊กอินสำหรับ virtualbox (แม้ว่าฉันจะมองเห็นอนาคตที่ไม่ไกลเกินไป) มีปลั๊กอินสำหรับผลิตภัณฑ์ virtualization 'องค์กร' ส่วนใหญ่รวมถึง vmware, xenserver และเกี่ยวกับ 'คลาวด์' ที่สำคัญทั้งหมด ผู้ให้บริการเช่นกัน ซึ่งหมายความว่ามีดนั้นดีกว่าสิ่งที่ Vagrant เสนอถ้า / เมื่อคุณพร้อมที่จะก้าวไปไกลกว่า virtualbox สำหรับตอนนี้ชุมชนเชฟดูเหมือนจะมีความสุขที่จะให้ผู้ใช้ virtualbox ปวกเปียกพร้อมกับ Vagrant โดยไม่รวม API เสมือนเข้ากับมีดปลั๊กอิน มีปลั๊กอินมีดคนพเนจรที่อนุญาตให้ใช้ถุงข้อมูลเพื่อผ่านการขัดแย้ง แต่มันยังคงต้องใช้ซอฟต์แวร์คนเร่ร่อน

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


8

ต่อไปนี้เป็นกรณีใช้งานของนักพัฒนาซอฟต์แวร์อีกสองคนที่ทำให้คนจรจัดลดความซับซ้อนลง (มากกว่า VirtualBox ธรรมดา "ธรรมดา") ฉันไม่เห็นกรณีการใช้งานเหล่านี้เรียกใช้โดยเฉพาะในคำตอบก่อนหน้า

  1. คนจรจัดช่วยโดยมีจุดประสงค์ในการรักษาแพลตฟอร์มการพัฒนาและการผลิตให้ใกล้เคียงที่สุด ในโลกอุดมคติคุณจะต้องเตรียมสภาพแวดล้อมการผลิตด้วยสคริปต์ THE SAME ที่ใช้ในการจัดเตรียม Vagrant VM ลดความประหลาดใจในการปรับใช้ให้น้อยที่สุด

  2. การทดสอบการรวมและการรวมอย่างต่อเนื่อง: Vagrant นั้นง่ายต่อการควบคุมจากการทดสอบดังนั้นจึงสามารถควบคุมสแต็คแบบหลายเครื่องทั้งหมดได้อย่างง่ายดายจากเครื่องมือเช่น Jenkins เมื่อทำการทดสอบ

ใช่ VirtualBox "ธรรมดา" สามารถใช้ได้ที่นี่เช่นกัน - แต่อนุสัญญาที่ใช้โดยคนพเนจรทำให้ง่ายต่อการตั้งค่าสถานการณ์เหล่านี้ขึ้น


1
ฉันเพิ่งคัดลอก vmx และ vmdk จาก Windows ไปยัง Linux อย่างจริงจัง อาจจะแตกต่างในโลกเสมือนจริง แต่ฉันสงสัยมัน! ง่ายกว่าอะไร คัดลอกไฟล์หรือ messing กับคนเร่ร่อนไฟล์และมากมายของปัญหาที่สามารถไปผิดหรือเปล่า?
hopeeekr

6
เพื่อให้ได้จุดที่ชัดเจนยิ่งขึ้น Vagrant อาจถูกมองว่าเป็นคำจำกัดความของภาษาเสมือนที่สามารถอธิบายลักษณะของเครื่องเสมือนได้ - โดยไม่เกี่ยวข้องกับโฮสต์ที่อยู่ภายใต้ VirtualBox, VMware, Parallels หรืออะไรก็ตามที่คุณมี ดูว่า Vagrant ไม่ใช่ "การแข่งขันกับ" VirtualBox แต่ใช้ได้กับมันหรือมากกว่านั้น
MarkHu

โดยทั่วไปหนึ่งจะใช้ Vagrantfile เพื่ออธิบายวิธีการตั้งค่าเครื่องเสมือนสำหรับโครงการ - Vagrantfile จะมุ่งมั่นที่จะควบคุมแหล่งที่มา (git ฯลฯ ) กับโครงการสำหรับการแบ่งปันบน GitHub เป็นต้นซึ่งมีขนาดเล็กกว่ามากในการดาวน์โหลด กว่า VMDK ทั้งหมด
Ben XO

0

เครื่องเสมือนบทคัดย่อของ Vagrant ช่วยให้คุณสามารถสลับการใช้งานเครื่องเสมือนได้อย่างง่ายดาย คุณสามารถเปลี่ยนจาก Virtual Box เป็น AWS หรือ Digital Ocean มันเหมือนกับการใช้ SQL แทนภาษาคิวรีเฉพาะฐานข้อมูล

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

+ สิ่งที่อดัมพูด

(ฉันยังไม่พบการใช้งานสำหรับ Chef หรือ Puppet แม้ว่า ... )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.