Vagrant ile Çalışmaya Başlamak #4

vagrant ile calismaya baslamak

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 temel kutu eklemek

Vagrant içerisine bir temel kutu eklemek için iki ayrı seçenek mevcut.

  1. Vagrant bulutunda tanımlı temel kutulardan birini eklemek.

  2. Üçü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 ?

Virtual Box

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

Serinin Tüm Başlıkları