Devops kısmında oldukça acemi biriyim. Bu acemiliğimin bir parçası da Linux işletim sistemi. Bunun için bol bol pratik yapmam gerektiğinin de farkındayım. İşte bu aşamada yardımıma Vagrant koşuyor. Bildiğiniz sanal laboratuvar. Peki bu laboratuvar benim için nasıl bir amaca hizmet ediyor? Tek bir kalıp ile bunu açıklayabilirim; ‘kur-parçala-dağıt-yeniden kur’. Evet aynen bu şekilde. İstediğim bir distroyu tek bir satır komut ile çağırıyorum. Elektronik bir alet gibi orasını burasını kurcalıyorum, bozulursa tek bir satır komut ile çöpe atıyorum ve tekrardan tek bir satır komut ile yenisini alıyorum. Tereddüt etmeden ve en hızlı yolla Linux öğreniyorum. En hızlı dediğime bakmayın, belki daha hızlısı da vardır ama benim bildiğim yol şimdilik bu. Vagrant için gelen official tanım ise şu şekilde:
Vagrant isolates dependencies and their configuration within a single disposable, consistent environment, without sacrificing any of your existing tools.
İsterseniz kısa bir örnek ile sanal laboratuvarımı somutlaştırayım. Başlamadan önce, Vagrant için bir providera ihtiyacımız var; herhangi bir virtualization product olabilir, ben VirtualBox kullanıyorum.
Ubuntu için kuralım:
$ wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
$ sudo apt update && sudo apt install vagrant
Kurulumu test edelim
$ vagrant -v
Vagrant 2.2.6
Kurulum tamamsa ilk Vagrant örneğimizi başlatılım
$ mkdir vagrant-ex && cd vagrant-ex
Ubuntu kurulumu yapacağımızı düşünürsek bize bir image lazım. Vagrant bunları box olarak tanımlıyor. Buradan kullanılabilir boxlara ulaşabilirsiniz.
~/vagrant-ex$ vagrant init ubuntu/bionic64
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.
Komut ile beraber belirttiğimiz dizine Vagrantfile yerleştirildi.
~/vagrant-ex$ ls -al
total 12
drwxrwxr-x 2 burak burak 4096 Ağu 15 06:57 .
drwxr-xr-x 32 burak burak 4096 Ağu 15 06:53 ..
-rw-rw-r-- 1 burak burak 3015 Ağu 15 06:57 Vagrantfile
Bu dosya bir takim default ayarlara sahip. İçeriğine yakından göz atalım:
~/vagrant-ex$ cat Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "ubuntu/bionic64"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.
# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# apt-get update
# apt-get install -y apache2
# SHELL
end
Kendimizde bir Vagrantfile oluşturabiliriz. Yukarıdaki çıktıda çoğu satır comment durumunda. Bunları uncomment yaparak özelleştirebiliriz. Dikkat etmemiz gereken önemli olan satırlardan birisi:
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
end
Tam olarak hangi boxın başlatılacağını belirtiyor. Vagrantfile dosyasını özelleştirmek istediğimizi varsayalım ve deneme amaçlı iki farklı özelleştirme yapalım:
$ sudo vim Vagrantfile
config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
vb.memory = "1024"
end
Burada VM için custom memory ayarladık. Sanırım default olarak 512mb ve bununla beraber 1024mb olarak ayarladık.
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y apache2
free -m
SHELL
Vagrant provision bizim için başlangıçta çalıştırılacak kodları düzenlememize yardımcı olur. Son olarak Vagrantfile dosyasi bu şekilde:
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y apache2
SHELL
end
Her şey hazırsa:
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
…
…
…
Burası internet bağlantınıza göre zaman alabilir. İşlem tamamlandığında artık bir sanal laboratuvarımız bulunuyor. Aşağıdaki komut satırı ile çalışan boxların statüsünü görebiliriz.
~/vagrant-ex$ vagrant global-status
id name provider state directory
------------------------------------------------------------------------
65c7867 default virtualbox running /home/burak/vagrant-ex
The above shows information about all known Vagrant environments
on this machine. This data is cached and may not be completely
up-to-date (use "vagrant global-status --prune" to prune invalid
entries). To interact with any of the machines, you can go to that
directory and run Vagrant, or you can use the ID directly with
Vagrant commands from any directory. For example:
"vagrant destroy 1a2b3c4d"
Eğer state durumu running ise başarılı bir şekilde sanal ortamımızı oluşturmuşuz bulunuyoruz. Aşağıdaki komut satırılı ile artık laboratuvara giriş yapabiliriz.
~/vagrant-ex$ vagrant ssh
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 4.15.0-189-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Mon Aug 15 04:52:27 UTC 2022
System load: 0.0 Processes: 97
Usage of /: 3.3% of 38.70GB Users logged in: 0
Memory usage: 15% IP address for enp0s3: 10.0.2.15
Swap usage: 0%
Last login: Mon Aug 15 04:46:12 2022 from 10.0.2.2
Dilediğiniz gibi oynayın. Geri çıkış yapmak için:
vagrant@ubuntu-bionic:~$ logout
Connection to 127.0.0.1 closed.
Var olan bir boxı durdurmak için:
~/vagrant-ex$ vagrant halt <boxid> #global-status komut satırı ile elde edebilirsiniz.
==> default: Attempting graceful shutdown of VM...
Tekrardan boxın durumunu kontrol edelim:
~/vagrant-ex$ vagrant global-status
id name provider state directory
-------------------------------------------------------------------------
65c7867 default virtualbox poweroff /home/burak/vagrant-ex
Yeni state poweroff olarak gözüküyor. Komple kaldırmak için ise:
~/vagrant-ex$ vagrant destroy 65c7867
default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Destroying VM and associated drives...
~/vagrant-ex$ vagrant global-status
id name provider state directory
--------------------------------------------------------------------
There are no active Vagrant environments on this computer! Or,
you haven't destroyed and recreated Vagrant environments that were
started with an older version of Vagrant.
İşte Vagrant bu kadar basit!
İletişime geçmek, yorum bırakmak veya hatalarımı düzetlmek istersen mail atabilirsin.