Mengapa saya harus menggunakan Vagrant bukan hanya VirtualBox?

230

Saya telah menggunakan VirtualBox selama bertahun-tahun untuk menciptakan lingkungan pengembangan.

Banyak kolega saya berbicara tentang Vagrant dan banyak orang tampak sangat bersemangat tentang hal itu tetapi saya sepertinya tidak dapat memahami manfaatnya. Sepertinya bagi saya ini adalah serangkaian perintah baru yang harus dipelajari untuk melakukan hal yang sama. hal yang saya lakukan dengan Virtualbox.

Dengan VirtualBox, saya menginstal dan mengkonfigurasi lingkungan dengan sempurna, maka saya dapat mengemasnya sebagai OVA atau apa pun dan membaginya dengan pengguna kantor lainnya. Anda dapat mengambil snapshot dalam VirtualBox jika terjadi kesalahan.

Wayang dan koki bukan bagian dari Vagrant, itu urusan mereka sendiri, bukan?

Jadi ya, apa manfaat khusus yang ditawarkan Vagrant atas VirtualBox itu sendiri?

John Hunt
sumber
11
Dua tahun kemudian, saya sekarang menggunakan Vagrant setiap hari untuk pengembangan - hebat! Tim saya menggunakannya dan itu memecahkan masalah lingkungan dev kami.
John Hunt
1
pendapat di sini: Jika Anda tidak pernah kesulitan mengatur server PXE, kenal VBoxManage dengan hati, tahu cara men-setup nfs dalam waktu kurang dari satu menit dll. dan juga seperti langsung mengelola rantai build .. hampir tidak ada titik sama sekali. Nilai naik dengan setiap bagian dari teka-teki yang Anda lewatkan. Penggunaan yang meluas bukan dari integrasi boneka tetapi karena orang-orang dapat membuat lubang keamanan gambar langsung dari internet. tidak peduli apa yang mereka katakan padamu.
Florian Heigl
2
3,5 tahun kemudian dan sekarang saya menggunakan buruh pelabuhan setiap hari untuk pengembangan. Itu bagus, tetapi binatang buas berbeda dengan gelandangan ... Tergantung pada kebutuhan Anda, saya percaya gelandangan masih merupakan platform pengembangan yang lebih baik untuk tim - itu jauh lebih mudah untuk dikerjakan.
John Hunt
5
4 tahun dan saya menemukan buruh pelabuhan itu mengerikan. Vagina berumur panjang.
John Hunt
3
komentar Anda membuat ini jauh lebih menyenangkan
Florian Heigl

Jawaban:

151

Ini adalah pertanyaan besar, jadi saya akan memecahnya menjadi tiga bagian.

Gelandangan

Vagrant digunakan untuk mengatur satu atau lebih mesin virtual dengan:

  • Mengimpor gambar yang sudah dibuat sebelumnya (disebut "kotak")
  • Pengaturan pengaturan khusus VM (alamat IP, nama host, penerusan porta, memori, dll.)
  • Menjalankan perangkat lunak bawaan seperti Wayang atau Koki

Perhatikan bahwa itu tidak menginstal perangkat lunak atau mengatur mesin melewati memuat VM dan pengaturan pengaturan VirtualBox. Anggap saja sebagai mesin scripting untuk VirtualBox.

Berikut adalah beberapa alasan yang saya lihat untuk menggunakan Vagrant lebih dari sekadar VirtualBox.

1. Mengatur Jaringan Multi-VM dengan Mudah

Sebagian besar konten pengguna daya Vagrant yang saya baca adalah tentang mengatur beberapa VM secara bersamaan. Vagrant memberi Anda satu file konfigurasi untuk mengatur ini, memungkinkan Anda untuk meluncurkan semuanya dengan satu perintah.

Katakanlah Anda telah mengkonfigurasi tiga VM untuk saling terhubung menggunakan IP statis pada subnet 192.168.1. *. Anda menemukan diri Anda di lokasi yang sudah menggunakan subnet itu untuk membagikan alamat IP, dan VM Anda sekarang bertentangan. Dengan Vagrant, Anda cukup mengedit Vagrantfile dan memuat ulang VM, sedangkan dengan VirtualBox Anda harus membuka pengaturan untuk setiap VM, jika tidak boot masing-masing VM dan ubah di dalamnya.

2. Kontrol Sumber

Dengan meletakkan pengaturan dalam file teks, ini memungkinkan konfigurasi diletakkan di bawah kendali sumber. Membuat beberapa perubahan minggu lalu dan secara tidak sengaja merusak gambar? Kembalikan perubahan dan muat ulang VM. Anda dapat melakukan ini dengan snapshot VirtualBox, tetapi akan memakan banyak ruang lebih dari sekedar Vagrantfile.

3. Berbagai Platform

Ada sejumlah besar kotak yang tersedia di situs-situs seperti http://vagrantbox.es . Ini memungkinkan Anda untuk mencoba berbagai OS atau distribusi, menerapkan ketentuan yang sama untuk mengatur lingkungan yang sama. Ini dapat membantu dengan pengujian atau menambahkan dukungan ke platform baru, dan akan memakan waktu hanya menggunakan VirtualBox.

Ada banyak argumen untuk menggunakan perangkat lunak pencadangan, serta menggunakan snapshot gambar. Untuk diskusi tambahan, saya akan mengarahkan Anda ke artikel bagus Stephen Nelson-Smith Bagaimana Membangun 100 Server Web dalam Sehari .

Adam Lukens
sumber
8
Namun, saya tidak mengerti mengapa saya harus menggunakan gelandangan di lingkungan pengembangan! Karena, itu mahal (jika Anda ingin menggunakan VMWare!) Kita dapat menyiapkan mesin virtual seperti kotak dasar yang digunakan oleh gelandangan kemudian mendapatkan klon oleh VMware untuk menyiapkan mesin virtual lain. Pertama dan terutama, kita dapat mengontrol semua pengaturan mesin virtual dengan vmrunperintah yang ditawarkan oleh VMware bahkan perubahan alamat IP atau menjalankan skrip di dalam mesin tamu!
Oğuz Çelikdemir
3
@ OğuzÇelikdemir Itu poin yang adil. Vagrant hanya menempatkan front-end yang lebih mudah untuk VMWare sehubungan dengan membawa mesin baru. Di belakang layar, digunakan vmrununtuk mengontrolnya. Saya selalu menggunakan VirtualBox, dan karenanya tidak memiliki pengalaman dengan backend VMWare.
Adam Lukens
1
@AdamLukens, Terima kasih atas komentar terinci. Apa yang Anda sebutkan terdengar menarik .. tapi saya ingin tahu apakah Anda mengetahui VboxManageperintahnya? virtualbox.org/manual/ch08.html Cukup banyak semua yang Anda sebutkan dapat dibuat sebagai skrip dengan meneruskan ip / parameter tertentu ke vboxmanage controlvmatau perintah serupa dalam skrip shell dan kemudian kontrol versi itu .. Jadi, bagaimana cara vagrantmemperbaikinya virtualbox?
alpha_989
@ alpha_989 Saya setuju. Tampaknya tidak ada poin unik untuk menggunakan Vagrant. Hanya untuk kenyamanan.
Niklas Rosencrantz
27

Selain jawaban luar biasa yang diberikan oleh Adam, Vagrant mengikat semuanya bersama-sama. Meskipun Chef dan Puppet (dan skrip Garam dan cangkang dan penyedia apa pun lainnya yang ingin Anda gunakan) adalah hal-hal yang terpisah, Vagrant mengikat semuanya dan membuatnya bekerja hanya dengan a vagrant up.

Perintah yang satu itu akan

  1. mulai saja VM jika hanya itu yang dibutuhkan, tetapi itu juga akan
  2. buat kotak dari kotak dasar yang Anda tentukan jika itu juga belum selesai, tetapi jika Anda bahkan tidak memiliki kotak dasar pada mesin Anda, itu akan menjadi yang pertama
  3. ambil dari URL-nya dan unduh ke mesin Anda.

Anda tidak harus memikirkan semua itu. Katakanlah Anda beralih ke proyek lain, yang dimulai oleh rekan kerja. Anda hanya memeriksa kode dari repo Anda, dan menjalankan vagrant up, tidak khawatir tentang mengunduh ISO atau menginstal apa pun, atau bertanya-tanya versi distro mana yang perlu Anda gunakan untuk klien tertentu, atau apakah Anda memiliki salinan VM yang sudah memiliki segalanya kamu membutuhkan.

Anda bahkan tidak perlu khawatir tentang apakah mereka telah mengatur semuanya menggunakan Chef atau Wayang atau hanya skrip shell. (Oke, jadi Anda mungkin perlu melakukan bundle installatau memastikan Anda sudah menginstal semuanya, tetapi masih bukan masalah besar.)

Dengan mengikat semuanya bersama-sama, dan menyediakan antarmuka yang terpadu untuk semuanya, itu dapat membuat semua kasus penggunaan yang paling sederhana menjadi jauh lebih mudah. Pada awalnya Anda mungkin merasa seperti baru mempelajari kembali cara baru untuk melakukan apa yang sudah Anda lakukan, tetapi begitu Anda semakin dalam menggunakan Vagrant, Anda akan menemukan bahwa Anda dapat melakukan lebih banyak lagi dengan lebih sedikit usaha. Ini akan sepadan dengan investasi waktu awal.

iconoclast
sumber
8
Tapi itu jauh lebih mudah dan lebih cepat bagi saya untuk mengirimkan gambar VM presetup pengembang daripada bagi mereka untuk menginstal gelandangan, belajar bagaimana menggunakannya, dan menangani berbagai masalah yang muncul, terutama ketika mendukung kotak jendela. Aku benar-benar JANGAN paham juga. Tampaknya tidak lain adalah fanboy.
hopeseekr
5
Memasang Vagrant sangat mudah akhir-akhir ini. Siapa pun yang tidak dapat menginstalnya tidak dapat dipercaya untuk menulis kode. Memiliki Vagrantfile dalam kode sumber Anda yang diperiksa pengembang sebenarnya jauh lebih mudah daripada mengirim VM. Vagrantfile mendefinisikan pengaturan, termasuk URL untuk mengunduh VM dasar (yang kemudian dikonfigurasikan). Jika pada awalnya Anda tidak perlu melakukan perubahan konfigurasi, maka Anda sudah siap. Tetapi saat Anda mengerjakan proyek Anda, kemungkinan Anda harus melakukan perubahan. Lakukan itu di Vagrantfile Anda.
iconoclast
5
Karena Anda menjaga Vagrantfile dengan kode Anda, semua pengembang yang bergabung dengan proyek akan secara otomatis mendapatkan perubahan yang Anda buat pada VM Anda, karena Anda membuatnya di Vagrantfile. Mengkonfigurasi Vagrantfile Anda tidak perlu sulit. Anda dapat menggunakan penyediaan shell jika Anda menemukan Chef dan Wayang terlalu banyak (yang sering terjadi). Jika Anda dapat memasukkan perintah shell di VM, maka itu adalah rintangan kecil untuk mengatur perintah penyediaan shell di Vagrantfile. Ini akan membutuhkan upaya kecil di muka dan menghemat banyak sakit kepala dalam jangka panjang.
iconoclast
4
dan kapan Anda perlu mengubah sesuatu di semua 50 komputer?
iconoclast
4
Diskusi di sini benar-benar tentang optimasi prematur. Jangan gunakan gelandangan jika Anda tidak membutuhkannya. Gunakan gelandangan ketika Anda menemukan membuat VM menjadi membosankan.
cammil
9

Kemampuan untuk mengintegrasikan koki atau boneka dengan penyediaan VM adalah kuncinya. Sebagian besar pengguna Vagrant akan memberi tahu Anda bahwa mereka menjalankan 'ketentuan gelandangan' dan kadang-kadang 'gelandangan memuat kembali lebih sering daripada' gelandangan naik 'atau' menghancurkan gelandangan '. Tugas-tugas ini menunjukkan pekerjaan yang sebenarnya bukan dalam memutar / menurunkan VM tetapi 'mengelola' mereka setelah fakta.

Untuk mengajukan pertanyaan yang lebih baik (diajukan oleh pengguna Chef yang mahir, mungkin) mungkin mengapa menggunakan Vagrant dan bukan pisau dengan plugin yang sesuai (sebentar lagi akan menuju plugin virtualbox)? Misalnya, meneruskan nilai argumen yang disimpan dalam kantung data ke plugin pisau (cara) lebih cerdas, fleksibel dan mudah dikelola daripada menyulap satu Vagrantfile raksasa. Saya biasanya mendefinisikan sumber daya 'dinamis' saya seperti # CPU, jumlah memori, yang digunakan oleh OS, nama host, IP, rute, dll, dalam chef databag sehingga saya tidak perlu terus mengubah resep saya; - ). Mengedit databag melalui antarmuka web Chef adalah tugas entri data yang sangat mudah yang dapat saya berikan kepada sebagian besar operator junior. Dengan Vagrantfile, kode modiyfing Anda selamanya dan percaya atau tidak - istirahat kode - yang cukup banyak menjamin Anda TIDAK akan menyerahkan perubahan sederhana kepada staf Operasi,

Selain dari pisau fakta belum memiliki plugin untuk virtualbox (meskipun saya membayangkan satu di masa depan tidak terlalu jauh), sudah ada plugin untuk sebagian besar produk virtualisasi 'perusahaan', termasuk vmware, xenserver dan hampir semua 'cloud' utama penyedia layanan, juga. Ini berarti pisau jauh lebih unggul dari yang ditawarkan Vagrant jika / ketika Anda siap untuk bergerak melampaui virtualbox. Untuk saat ini, komunitas Chef tampaknya senang membiarkan pengguna virtualbox pincang bersama dengan Vagrant dengan tidak mengintegrasikan virtualbox apis untuk plugin pisau. Ada plugin pisau-gelandangan yang memungkinkan penggunaan tas data untuk menyampaikan argumen. Tapi, itu masih membutuhkan perangkat lunak gelandangan dan itu Vagolonef monolitik berfungsi.

Jadi, saya akan mengambil risiko dan mengatakan Vagrant jelas TIDAK 'lebih baik' dari pada Chef dengan pisau; tetapi perlu (untuk saat ini) jika Anda bersikeras pada virtualbox dan mungkin 'lebih mudah' daripada mengelola koki dengan tas data, asalkan Anda memiliki lingkungan yang cukup sederhana untuk dikelola.

Andrew
sumber
8

Berikut adalah dua lagi kasus penggunaan pengembang yang menyimpang gelandangan (lebih dari "biasa" VirtualBox). Saya tidak melihat kasus penggunaan ini dipanggil secara khusus dalam jawaban sebelumnya.

  1. Vagrant membantu dengan tujuan menjaga platform pengembangan dan produksi sedekat mungkin satu sama lain. Di dunia yang ideal, Anda akan menyediakan lingkungan produksi dengan script SAMA SAMA yang digunakan untuk menyediakan Vagrant VM, meminimalkan kejutan pada waktu penyebaran.

  2. Tes integrasi dan integrasi berkelanjutan: Vagrant mudah dikendalikan dari tes, dan karenanya seluruh tumpukan multi-mesin dapat dengan mudah dikontrol dari alat-alat seperti Jenkins saat melakukan tes berjalan.

Ya, VirtualBox "biasa" dapat digunakan di sini juga - tetapi konvensi yang digunakan oleh gelandangan membuatnya lebih mudah untuk mengatur skenario ini.

Ben XO
sumber
1
Saya serius hanya menyalin vmx dan vmdk dari Windows ke Linux. Mungkin berbeda di dunia virtualbox, tapi saya ragu! Apa yang lebih mudah? Menyalin file atau mengacaukan vagrantfiles dan segudang masalah yang bisa salah?
hopeseekr
6
Untuk menempatkan poin yang lebih baik di atasnya, Vagrant dapat dianggap sebagai bahasa definisi virtual yang dapat menggambarkan karakteristik mesin virtual - independen apakah itu di-host di bawah VirtualBox, VMware, Parallels, atau apa pun yang Anda miliki. Lihat bagaimana Vagrant bukan "pesaing" dari VirtualBox, tetapi bekerja dengannya, atau di luarnya.
MarkHu
Orang biasanya akan menggunakan Vagrantfile untuk menggambarkan bagaimana mesin virtual akan diatur untuk proyek - Vagrantfile akan berkomitmen untuk kontrol sumber (git, dll) dengan proyek, untuk berbagi di GitHub dll. Ini jauh lebih kecil untuk diunduh dari seluruh VMDK.
Ben XO
0

Vagrant abstrak mesin virtual sehingga memungkinkan Anda untuk dengan mudah beralih implementasi mesin virtual. Anda dapat beralih dari Virtual Box ke AWS atau Digital Ocean. Ini seperti menggunakan SQL alih-alih bahasa kueri khusus database.

Vagrant memungkinkan pengembang untuk mengatur lingkungan mereka dengan cepat hanya dengan satu perintah dan itu persis sama dengan yang lainnya. Ini penting di perusahaan besar tempat pengembang sering datang & pergi. Itu dapat mengurangi waktu untuk mengatur dari 3 hari menjadi 1 jam.

+ Apa yang dikatakan Adam.

(Aku masih belum menemukan kegunaan untuk Chef atau Wayang ...)

Chloe
sumber