Neden sadece VirtualBox yerine Vagrant kullanmalıyım?


230

Bir geliştirme ortamı oluşturmak için VirtualBox'ı yıllardır kullanıyorum.

Meslektaşlarımın birçoğu Vagrant hakkında konuşuyor ve birçok insan bu konuda çok heyecanlı görünüyor ama bunun faydalarını kavrayamıyor gibiyim .. Bana aynı şeyi yapmayı öğrenmek için bir dizi yeni komut gibi görünüyor. Virtualbox ile yaptığım şeyler.

VirtualBox ile bir ortamı mükemmel bir şekilde kurar ve konfigüre ederim, sonra onu bir OVA veya herhangi bir şekilde paketleyebilir ve diğer ofis kullanıcılarıyla paylaşabilirim. Bir şeyler ters giderse, VirtualBox’da anlık görüntüyü alabilirsiniz.

Kukla ve şef gerçekten Vagrant'ın bir parçası değiller, onlar kendi başlarına değil mi?

Öyleyse evet, Vagrant'ın VirtualBox üzerinden sunduğu avantajlar nelerdir?


11
İki senedir şimdi geliştirme için her gün Vagrant kullanıyorum - bu harika! Ekibim kullanıyor ve dev çevre sorunlarımızı çözdü.
John Hunt

1
Burada PXE sunucularını kurma konusunda hiçbir sıkıntınız olmadıysa, VBoxManage'ı kalpten tanıyın, nfs'i bir dakikadan daha kısa sürede nasıl kuracağınızı ve aynı zamanda doğrudan oluşturma zincirlerini yönetmeyi de bildiğinizden emin olun. Kaçırdığınız bulmacanın her parçasıyla değer artar. Yaygın kullanım kukla entegrasyonundan kaynaklanmamaktadır, ancak insanlar internetten güvenlik altındaki görüntüleri istila edebilmektedir. sana ne söyledikleri önemli değil.
Florian Heigl

2
3.5 yıl sonra, geliştirme için her gün liman işçisi kullanıyorum. Güzel, ama serseriliğe farklı bir canavar ... Gereksinimlerinize bağlı olarak serseri hala takımlar için daha iyi bir geliştirme platformu olduğuna inanıyorum - çalışmak için çok daha kolay.
John Hunt

5
4 yıl sonra liman işçisi korkunç buldum. Çok yaşa Vagrant.
John Hunt,

3
Yorumlarınız bu kadar eğlenceli hale geliyor
Florian Heigl

Yanıtlar:


151

Bu büyük bir soru, bu yüzden üç bölüme ayıracağım.

serseri

Vagrant, bir veya daha fazla sanal makineyi ayarlamak için kullanılır:

  • Önceden oluşturulmuş görüntüleri içe aktarma ("kutular" olarak adlandırılır)
  • VM'ye özgü ayarları ayarlama (IP adresi, ana bilgisayar adları, bağlantı noktası iletme, bellek vb.)
  • Puppet veya Chef gibi temel hazırlık yazılımı çalıştırma

Yazılım yüklemediğini veya makineyi VM'yi yükleyerek ve VirtualBox ayarlarını belirleyerek kurmayacağını unutmayın. VirtualBox için bir komut dosyası altyapısı olarak düşünün.

İşte Vagrant'ı sadece VirtualBox üzerinden kullanmamın bazı sebepleri.

1. Kolaylıkla Multi-VM Ağları Kurun

Okuduğum Vagrant ileri seviye kullanıcı içeriğinin çoğu, aynı anda birden fazla VM oluşturmakla ilgiliydi. Vagrant size bunları ayarlamak için tek bir yapılandırma dosyası verir ve hepsini tek bir komutla başlatmanızı sağlar.

192.168.1. * Alt ağındaki statik IP'leri kullanarak birbirleriyle ağ oluşturmak için üç VM yapılandırdığınızı varsayalım. Kendinizi IP adreslerini dağıtmak için zaten bu alt ağı kullanan bir yerde buluyorsunuz ve VM'leriniz artık çakışıyor. Vagrant ile, Vagrant dosyasını düzenleyebilir ve VM'leri yeniden yükleyebilirsiniz, oysa VirtualBox ile her VM için önyükleme yapmaz ve içeride değişiklik yapmazsanız, her VM için ayarları açmanız gerekir.

2. Kaynak Kontrolü

Ayarları bir metin dosyasına koyarak, yapılandırmanın kaynak kontrolüne alınmasını sağlar. Geçen hafta bazı değişiklikler yaptı ve yanlışlıkla görüntüyü kırdı? Yalnızca değişiklikleri geri alın ve VM'yi yeniden yükleyin. Bunu VirtualBox anlık görüntüleriyle başarabilirsiniz, ancak yalnızca bir Vagrantfile'den çok daha fazla yer kaplar.

3. Çeşitli Platformlar

Http://vagrantbox.es gibi sitelerde çok sayıda kutu bulunmaktadır . Bu, benzer ortamlar oluşturmak için aynı provizyonu uygulayarak çeşitli işletim sistemleri veya dağıtımlar denemenize olanak tanır. Bu, yeni platformlara test etme veya destek ekleme konusunda yardımcı olabilir ve yalnızca VirtualBox kullanarak zaman alabilir.

Hazırlık yazılımı kullanmanın yanı sıra görüntü anlık görüntüleri kullanmak için birçok argüman vardır. Ek tartışma için, sizi Stephen Nelson-Smith'in mükemmel bir makalesinde göstereceğim: Günde 100 Web Sunucusu Nasıl Yapılır .


8
Yine de neden serseriyi geliştirme ortamında kullanmam gerektiğini anlamıyorum! Çünkü pahalıdır (VMWare kullanmak istiyorsanız!) Serseriler tarafından kullanılan taban kutuları gibi sanal bir makine hazırlayabiliriz, sonra başka bir sanal makine kurmak için VMware tarafından klonlanırız. Öncelikle ve en önemlisi, tüm sanal makine ayarlarını vmrunVMware'in IP adres değişikliklerini bile teklif ettiği veya konuk makinesinde bir komut dosyası çalıştıran komutuyla kontrol edebiliriz !
Oğuz Çelikdemir

3
@ OğuzÇelikdemir Bu adil bir nokta. Vagrant, yeni bir makine açmak için VMWare'e daha kolay bir ön uç sağlıyor. Perdenin arkasında, onu vmrunkontrol etmek için kullanıyor . Her zaman VirtualBox kullanmıştım ve bu nedenle VMWare arka ucunda herhangi bir deneyimim olmadı.
Adam Lukens

1
@AdamLukens, Detaylı yorumlarınız için teşekkürler. Söyledikleriniz ilginç geliyor… ama acaba VboxManagekomutun farkında mısınız? virtualbox.org/manual/ch08.html Bahsettiğiniz hemen hemen her şey, belirli bir ip / parametresini vboxmanage controlvmveya benzer bir komutu bir kabuk betiğinde geçirerek bir komut dosyası olarak oluşturulabilir ve ardından sürüm kontrolü bunu nasıl vagrantgeliştirir virtualbox?
alpha_989

@ alpha_989 Katılıyorum. Vagrant'ı kullanmak için benzersiz bir nokta yok gibi görünüyor. Sadece rahatınız için.
Niklas Rosencrantz

27

Adam tarafından verilen mükemmel cevaba ek olarak, Vagrant her şeyi bir araya getirir. Şef ve Kukla (ve Tuz ve kabuk senaryoları ve kullanmak istediğiniz diğer hazırlayıcılar) ayrı şeyler olsa da, Vagrant hepsini birbirine bağlar ve sadece a ile çalışmasını sağlar vagrant up.

Bu bir komut olacak

  1. Sadece gerekli olan şey buysa VM'yi başlatın, ama aynı zamanda
  2. Henüz yapılmadıysa, belirtilen ana kutunuzdan kutu oluşturun, ancak makinenizde taban kutunuz bile yoksa, ilk
  3. URL'sinden alın ve makinenize indirin.

Bunları düşünmek zorunda değilsin. Bir iş arkadaşınız tarafından başlatılan farklı bir projeye geçdiğinizi varsayalım. Kodu yalnızca deponuzdan kontrol edersiniz ve vagrant upçalışırsınız, ISO'ları indirmek veya herhangi bir şey yüklemekle ilgili endişe duymazsınız veya belirli bir müşteri için hangi sürümün kullanılması gerektiğini merak ediyorsunuz ya da zaten her şeye sahip bir VM'nin bir kopyasının olup olmadığını düşünüyorsunuz. ihtiyacın var.

Şef veya Kukla kullanarak bir şeyler ayarlayıp ayarlamadıklarını ya da sadece komut dosyalarını yazdıklarından endişe duymanıza bile gerek yok. (Tamam, bu yüzden bir şey yapmanız gerekebilir bundle installya da başka bir şey kurmuş olduğunuzdan emin olmanız gerekebilir , ama yine de çok fazla bir şey değil.)

Her şeyi birbirine bağlayarak ve hepsi için birleşik bir arayüz sunarak, en basit kullanım durumlarını çok daha kolay hale getirebilir. İlk başta, halihazırda yaptığınız şeyi yapmanın yeni bir yolunu yeniden öğrenmiş gibi hissedebilirsiniz, ancak bir kez daha Vagrant kullanımına girdiğinizde çok daha az çabayla daha fazlasını yapabileceğinizi keşfedeceksiniz. İlk zaman yatırımına değer.


8
Ancak, bir geliştiriciye önceden ayarlanmış bir VM görüntüsü göndermek, serseri yüklemeleri, nasıl kullanacaklarını öğrenmeleri ve özellikle desteklerken ortaya çıkan sayısız sorunların üstesinden gelmeleri benim için çok daha kolay ve daha hızlı. Windows kutuları Ben de gerçekten alamadım. Fanboys dışında hiçbir şey gibi görünüyor.
hopeseekr

5
Vagrant'ı kurmak bugünlerde inanılmaz derecede kolaydır. Yükleyemeyen hiç kimsenin kod yazması güvenilir olmayabilir. Kaynak kodunuzda, geliştiricinin kontrol ettiği bir Vagrant dosyası olması, bir VM göndermekten çok daha kolaydır. Vagrantfile, temel VM'nin indirileceği URL (daha sonra yapılandırılacakları) dahil olmak üzere kurulumu tanımlar. Başlangıçta yapılandırma değişiklikleri yapmanız gerekmiyorsa, hepiniz hazırsınız demektir. Ancak, projeniz üzerinde çalışırken büyük olasılıkla değişiklik yapmanız gerekecektir. Bunu Vagrantfile'de yap.
iconoclast

5
Vagrantfile'i kodunuzla birlikte tuttuğunuzdan, projeye katılan tüm geliştiriciler, Vagrantfile'de yaptığınız için otomatik olarak VM'nizde yaptığınız değişiklikleri alacaktır. Vagrantfile'nizi yapılandırmak zor olmak zorunda değildir. Aşçı ve Kuklanın aşırı ısırıldığını görürseniz (sık sık olduğu gibi) kabuk hazırlamayı kullanabilirsiniz. Sanal Makine'ye kabuk komutlarını girebiliyorsanız, Vagrantfile'de kabuk sağlama komutları ayarlamak çok küçük bir engeldir. Küçük bir ön çaba gösterecek ve uzun vadede size çok fazla baş ağrısı kazandıracak.
iconoclast

4
ve 50 bilgisayardaki bir şeyi değiştirmek istediğinizde?
iconoclast

4
Buradaki tartışmalar gerçekten erken optimizasyon hakkında. İhtiyacınız yoksa serseri kullanmayın. VM oluşturma işleminin sıkıcı hale geldiğini anlamak için serseri kullanın.
cammil

9

Aşçı veya kuklayı VM tedarikine entegre edebilmek anahtardır. Çoğu Vagrant kullanıcısı size 'serseri hükmü' kullandıklarını ve bazen 'serseri yeniden yükleme' yaptıklarını 'serseri yukarı' veya 'serseri yok etme' den çok daha fazla sık sık söyleyeceklerdir. Bu görevler, asıl işin VM'lerin çevrilmesinde / aşağılanmasında olmadığını, ancak gerçekliğin ardından 'yönetildiğini' göstermektedir.

Daha iyi bir soru oluşturmak için (yine de uzman Chef kullanıcıları tarafından ortaya konan), uygun bir eklentiyle bıçak kullanmama nedenini kullanabilir (birazdan sanal kutu eklentisine ulaşacak)? Örneğin, bir veri çantasında depolanan argüman değerlerinin bir bıçak eklentisine geçirilmesi, bir dev Vagrantfile’in hokkabazlık etmekten daha akıllı, esnek ve yönetilebilirdir. Tipik olarak 'dinamik' kaynaklarımı, tarif veri tabanımı değiştirmemem gereken şef veri tabanlarında, CPU'ların sayısı, bellek miktarı, işletim sisteminin kurması, ana bilgisayar adı, IP, yollar vb. ). Chef web arayüzü üzerinden bir veri tabanını düzenlemek, en küçük operatörlere verebileceğim gerçekten kolay bir veri girişi görevidir. Vagrantfile ile sonsuza dek kodlama kodunuz ve ister inan ister inanmayacaksınız - kod kırılmalarına - bu, Operasyon personelinde basit değişiklikler yapmamayacağınızı garanti eder.

Bıçağın henüz sanal kutu için bir eklentisi olmadığı halde (çok uzak olmayan bir gelecekte bir tane öngördüğüm halde), vmware, xenserver ve hemen hemen her ana 'bulut' dahil olmak üzere çoğu 'kurumsal' sanallaştırma ürünleri için eklentiler var. sağlayıcı olarak da. Bunun anlamı, bıçak, sanal kutunun ötesine geçmeye hazır olduğunuzda Vagrant'ın sunduğundan çok daha üstün olduğu anlamına gelir. Şimdilik, Chef topluluğu, Virtualbox kullanıcılarının bir bıçak eklentisi için virtualbox apis'i entegre etmeyerek Vagrant ile birlikte aksatmasına izin vermekten mutlu görünüyor. Veri torbalarının argümanları iletmek için kullanılmasına izin veren bir bıçak-vagrant eklentisi var. Ancak, hala serseri bir yazılım gerektirir ve çalışması için yekpare Vagrantfile.

Yani, bir uzuv üzerinde çıkacağım ve Vagrant'ın kesinlikle bıçaklı Şef'ten daha iyi olmadığını söyleyebilirim; Ancak, yönetmeniz için oldukça basit bir ortam olması koşuluyla, sanal kutuda ısrar ediyorsanız ve belki de veri çantalarıyla aşçıyı yönetmekten 'daha kolay' iseniz, gerekli.


8

Burada serseri basitleştiren iki geliştirici örneği daha var ("sade" VirtualBox üzerinden). Daha önceki cevaplarda özellikle bu davaların kullanıldığını görmedim.

  1. Vagrant, geliştirme ve üretim platformlarını birbirine olabildiğince yakın tutma amacına yardımcı olur. İdeal bir dünyada, üretim ortamını Vagrant VM'yi tedarik etmek için kullanılan AYNI senaryolarla hazırlar ve dağıtım süresindeki sürprizleri en aza indirirsiniz.

  2. Entegrasyon testleri ve sürekli entegrasyon: Vagrant'ın testlerden kontrol edilmesi kolaydır ve bu nedenle tüm çoklu makine yığınları, test çalışmaları sırasında Jenkins gibi araçlardan kolayca kontrol edilebilir.

Evet, "plain" VirtualBox burada da kullanılabilir - ancak serseri tarafından kullanılan kurallar bu senaryoları düzenlemeyi kolaylaştırır.


1
Sadece vmx ve vmdk dosyalarını Windows'tan Linux'a kopyaladım. Belki sanal kutu dünyasında farklı, ama bundan şüpheliyim! Hangisi daha kolay? Bir dosyayı kopyalamak veya vagrantfiles ve yanlış gidebilen sayısız sorunla uğraşmak?
hopeseekr

6
Daha hassas bir noktaya değinmek için Vagrant, VirtualBox, VMware, Parallels veya neye sahip olduğunuza bağlı olup olmadığına bağlı olmadan, sanal bir makinenin özelliklerini tanımlayabilen sanal bir tanım dili olarak düşünülebilir. Vagrant'ın VirtualBox ile "rekabet" değil, onunla ya da onun ötesinde çalıştığını görün.
MarkHu

Bir kişi tipik olarak bir projeye yönelik sanal bir makinenin nasıl kurulacağını açıklamak için bir Vagrantfile kullanırdı - Vagrantfile GitHub'da paylaşmak için proje ile kaynak kontrolü (git, vb.) Yapmayı taahhüt ederdi. VMDK'nın tamamı.
Ben XO

0

Vagrant sanal makineleri soyutlar, böylece sanal makine uygulamalarını kolayca değiştirmenize izin verir. Sanal Kutu'dan AWS veya Dijital Okyanusa geçiş yapabilirsiniz. Veritabanına özgü bir sorgu dili yerine SQL kullanmak gibi.

Vagrant, geliştiricilerin çevrelerini tek bir komutla hızlı bir şekilde kurmalarına izin verir ve bu tamamen diğerlerininkiyle aynıdır. Bu, geliştiricilerin sık sık gelip gittiği büyük şirketler için önemlidir. Kurulum süresini 3 günden 1 saate kadar azaltabilir.

+ Adam ne dedi?

(Yine de şef veya kukla için bir kullanım bulamadım ...)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.