Vagrant ile Çalışmaya Başlamak #4
1. Kutu Yönetimi
Vagrant'ın yapı taşı kutulardır.Terminoloji kısmında bahsetmiştik. Gelin şimdi bu kutular hakkında daha detaylı teknik bilgi edinelim.
Vagrant ile çalışmaya başlamak için, öncelikle bir temel kutuya ihtiyacımız var. Temel kutuların hangi adreslerde barındığını yine terminoloji kısmında belirtmiştim. Aynı adresleri burayada alalım.
1.1.Temel Kutu Eklemek
Vagrant içerisine bir temel kutu eklemek için iki ayrı seçenek mevcut.
Vagrant bulutunda tanımlı temel kutulardan birini eklemek.
Üçüncü kişiler tarafından hazırlanmış kutuları eklemek
Kutu eklemek için baz alacağımız taslak komut şudur;
vagrant box add [title] [url]
Tahmin edeceğiniz üzere [title]
ve [url]
ifadeleri birer parametre.
1.1.1 Buluttan Kutu Eklemek
Şu adrese gidelim. Burada listelenen temel kutular Vagrant bulutunda bulunan ve sizin kullanımınız için hazır hale getirilmiş kutular. Buradan kutu eklemek için Vagrant'a sadece kutu ismini belirtmeniz yeterli.
Buluttan kutuyu ekleyebilmemiz için vereceğimiz komutta [title]
parametresi zorunlu olarak bulunmak durumunda.Listelenen kutulardan "hashicorp/precise32" temel kutusunu ekleyeceğiz. Bu kutunun açıklamasına baktığımızda "A standard Ubuntu 12.04 LTS 32-bit box" yazdığını görüyoruz.
Aşağıdaki komutu kullanarak ilk temel kutumuzu ekleyelim.
vagrant box add hashicorp/precise32
Komutu verdikten sonra ilgili temel kutunun download işlemi başlayacak ve aşağı yukarı, aşağıdaki gibi bir çıktı gelecektir.
vagrant box add hashicorp/precise32
==> box: Loading metadata for box 'hashicorp/precise32'
box: URL: https://atlas.hashicorp.com/hashicorp/precise32
==> box: Adding box 'hashicorp/precise32' (v1.0.0) for provider: virtualbox
box: Downloading: https://atlas.hashicorp.com/hashicorp/boxes/precise32/versions/1.0.0/providers/virtualbox.box
box: Progress: 8% (Rate: 786k/s, Estimated time remaining: 0:05:29)
Eğer download işlemi tamamlandıysa, temel kutumuzun gerçekten eklenip eklenmediğini kontrol etmek için şu komutu çalıştıralım.
vagrant box list
Hemen çıktıya bakalım ve kutunun gerçekten eklendiğine emin olalım.
vagrant box list
# hashicorp/precise32 (virtualbox, 1.0.0)
Anlaşılan o ki, kutumuz başarı ile eklenmiş.
1.1.2 Başka bir kutu eklemek
Temel kutu eklemenin iki yolundan birini yukarıda anladık. Bir diğer yol olan, üçüncü kişiler tarafından hazırlanmış kutuların nasıl ekleneceğinide burada öğrenelim.
Ne zaman işe yarar ?
Bir proje için Vagrant ortamı hazırladınız ve bu ortamı takımdaki diğer arkadaşlarınızında kullanması gerekiyor. Siz içerisinde bulunduğunuz ortamı bir kutu haline getirerek, bir sunucuya yüklüyorsunuz. Kutunun sunucudaki bu adresini takımınızla paylaşıyorsunuz ve herkes kutuyu o adresten eklemiş oluyor.
Nasıl kullanılır ?
Buluttan kutu ekleme mantığından hiçbir farkı yok. Yine aynı komutu kullanıyoruz. Bu kutuları eklerken [title]
kısmına kendi belirlediğimiz bir başlığı, [url]
alanına ise kutunun bulunduğu adresi ekliyoruz.
Vagrantbox.es adresine gidelim ve kendimize bir temel kutu beğenelim. Bu sefer işletim sistemi Debian
olan bir temel kutu eklemiş olalım. Beğendiğimiz kutunun bulunduğu url yi kopyaladık ve kendimize özgü bir başlık vererek download işlemini başlattık.
vagrant box add debian_kutum http://dl.dropbox.com/u/54390273/vagrantboxes/Squeeze64_VirtualBox4.2.4.box
Download işlemi bittiye şu komutu tekrar çalıştıralım.
vagrant box list
Debian kutumuzunda verdiğimiz isimle kaydedildiğini görüyoruz.
debian_kutum (virtualbox, 0)
hashicorp/precise32 (virtualbox, 1.0.0)
İşte temel kutu eklemek bu kadar. Kolay dimi ?
Temel Vagrant Komutları
Hani söylemiştik.. Vagrant ile alakalı tüm yapılandırmamız Vagrantfile
adındaki dosyamızda tanımlanacak diye. İşte şimdi sıra geldi bu Vagrantfile
dosyasını oluşturmaya.
Vagrant init
Vagrantfile
adındaki dosyayı, yeni bir dosya oluşturup ismini "Vagrantfile" yaparak oluşturabilirsiniz. Ancak bize ek faydalar sağlaması sebebiyle, Vagrantfile
dosyasını komut satırında oluşturacağız. Vagrantfile oluşturmak için kullancağımız komut taslağı şudur;
vagrant init [kutu-adi] [kutu-url] [seçenekler]
kutu-adi
: Eğer bilgisayarınıza daha önceden vagrant box add
komutu ile tanımlamış olduğunuz temel kutular varsa, o kutulardan kullanmak istediğinizin ismini bu parametre yerine yazıyorsunuz.
kutu-url
: Kullanacağınız temel kutunun url'sini, Vagrantfile
oluştururken belirtmek isteyebilirsiniz. Bu gibi durumlarda bu parametreyi kullanabilirsiniz.
seçenekler
--force
- Vagrantfile oluşturmak istediğiniz dizinde daha önceden oluşturulmuş Vagrantfile varsa ve biz "Vagrant init" komutunu çalıştırmışsak üzerine yazmadan hata veriyor. Ancak bu parametreyi kullanırsanız, var olan dosyanın üzerine yazabilirsin demiş oluyorsunuz.--minimal
- Bu parametreyi kullanmazsak Vagrantfile içerisinde açıklama satırları ile belirtilmiş bazı tanımlamalar geliyor (Aşağıda daha net açıkladım). Eğer bu parametreyi kullanırsanız, Vagrantfile içeriği minimize ediliyor ve içeriğine şu üç satır yazılıyor.
Vagrant.configure(2) do |config|
config.vm.box = "base"
end
--output FILE
- Bu komut, Vagrant tanımlamalarını içerisinde barındıracak olan Vagrantfile dosyasının farklı bir isimle kaydedilmesini sağlar.FILE
kısmına ne yazarsanız dosya isminiz o olacaktır.
Örnek Zamanı
Diskimizin herhangi bir bölümünde "test" adında bir klasör oluşturalım ve komut satırını kullanarak bu dizine erişelim. Hemen bilgisayarımızda tanımlanmış ve kullanabileceğimiz kutu listesine göz atalım.
vagrant box list
# debian_kutum (virtualbox, 0)
# hashicorp/precise32 (virtualbox, 1.0.0)
Daha önceden iki farklı temel kutu tanımlamışız. Birini seçelim ve "vagrant init" komutunu verelim.
vagrant init hashicorp/precise32
# A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
Evet, komut satırı bize Vagrantfile
dosyasını başarı ile oluşturduğumuzu ve Vagrant up
komutunu kullanarak makineyi ayağa kaldırabileceğimizi söylüyor. Bunu yapacağız, ama önce şu oluşturduğumuz Vagrantfile
ın içeriğine bir metin dosyası görüntüleyicisi ile bakalım. Aceleye mahal yok.
Vagranfile
içeriği Ruby
dili kullanılarak yazılıyor. Tahmin edeceğiniz üzere dosya içerisinde, bir çok satır başında bulunan #
sembolü, o satırın açıklama satırı olduğunu belirtiyor. Vagrant yapımcıları bu açıklama satırlarını Vagrantfile
içeriğine yerleştirmişler. Eğer istersek, #
ifadelerini silip devamındaki komutları hemen kullanabilelim diye.
Vagranfile
içerisinde yapacağımız tüm spesifik tanımlamalar
Vagrant.configure(2) do |config|
# Komutlar
end
ifadesinin arasında bulunacak.
Bu dosya içerisinde çok fazla kaybolmadan iki tanımlamaya daha bakalım ve daha fazla detayına burada girmeyelim.
config.vm.box = "hashicorp/precise32"
Şeklınde yapılan tanımlama, yine tahmin edeğiniz üzere temel kutumuzun ne olduğunu belirtiyor. Biz eğer vagrant init
komutunu kullanırken ikinci parametre olarak {url}
yide vermiş olsaydık, temel kutu tanımlamasının hemen altında,
config.vm.box_url = "http://ORNEK_ADRES/ornek_kutu.box"
gibi bir tanımlama olacaktı.
Vagrant Up
Sanal sunucumuzu her ayağa kaldırmak istediğimizde bu komutu kullanacağız. Bu komut, verildiği dizinde Vagrantfile
isimli dosyayı arar. Bulursa içindeki tanımlamaları, Provider'a yani kullanmış olduğumuz VirtualBox yazılımına iletir. VirtualBox da bu bilgiler ışığında bize lazım olan sunucuyu hazır eder.
Az önce "test" dizini altında oluşturmuş olduğumuz Vagrantfile
dosyasını kullanarak sunucumuzu ayağa kaldıralım o halde.
vagrant up
Komutunu çalıştırdıktan sonra muhtemelen aşağıdakine yakın bir çıktı alacaksınız.
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'hashicorp/precise32'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'hashicorp/precise32' is up to date...
==> default: Setting the name of the VM: test_default_1433346413255_89589
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Connection timeout. Retrying...
default: Warning: Remote connection disconnect. Retrying...
default: Warning: Remote connection disconnect. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if its present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
default: The guest additions on this VM do not match the installed version of
default: VirtualBox! In most cases this is fine, but in rare cases it can
default: prevent things such as shared folders from working properly. If you see
default: shared folder errors, please make sure the guest additions within the
default: virtual machine match the version of VirtualBox you have installed on
default: your host and reload your VM.
default:
default: Guest Additions Version: 4.2.0
default: VirtualBox Version: 4.3
==> default: Mounting shared folders...
default: /vagrant => /home/mseven/APP/test
Verilen bu çıktıdaki her satırın bir anlamı var. Bunları ileride daha iyi anlayacağız.
Az önce söylemiştik. Vagrantfile dosyasındaki tanımlamalara göre VirtualBox sanal bir makine oluşturuyor diye. Gerçektende öylemi acaba ?
Gördünüzmü? İşletim sistemi Ubuntu olan, bir sanal makine oluşturulmuş ve bu makine "Running" yani çalışır durumda. Eğer biz temel kutu olarak Debian seçmiş olsaydık, debian kurulacaktı.
Vagrant Halt
Bu komut çalışır durumda olan sanal makinenizi tamamen kapatmanızı sağlar. Bilgisayarınızın bir sonraki açmanıza dek kapalı durması gibi düşünebilirsiniz.
vagrant halt [seçenekler]
Komutun kullanımı bu şekilde. Eğer herhangi bir sebep ile kapanmıyorsa [seçenekler]
parametresi olarak --force
veya kısaca -f
verilebilir ve sunucu kapatılmaya zorlanabilir.
Vagrant Reload
Sanal makinenizi yeniden başlatmanızı sağlar.
vagrant reload [seçenekler]
Vagrant Suspend
Makinenizin aktif durumu kaydedilir ve uyku moduna almanızı sağlar."Resume" komutunu kullanana kadar makineniz güzel güzel uyur.
vagrant suspend
Vagrant Resume
"Suspend" ile uyuttuğunuz makinenizi uyandırmanızı ve kaldığı yerden çalışmaya devam etmesini sağlar.
vagrant resume