What is Vagrant?
Vagrant ဆိုတာကတော့ Virtual Machines တွေကိုတည်ဆောက်ဖို့နဲ့ manage လုပ်ဖို့အတွက် အသုံးပြုရတဲ့ command-line tool တစ်ခုပဲဖြစ်ပါတယ်။ Vagrant သည် ပုံမှန် virtualbox, vmware တို့မှာ Virtual Machine Environment တစ်ခု ဖန်တီးသလိုပဲဖြစ်ပြီး မတူညီတဲ့အချက် ကတော့ virtualbox, vmware တို့မှာ မိမိအသုံးပြုချင်သည့် Os ကို Installation လုပ်ပြီးမှ အသုံးပြုလို့တာပဲဖြစ်ပါသည်။ Vagrant မှာတော့ပုံမှန် Traditional နည်းအတိုင်း (e.g. virtualbox) ပေါ်မှာပဲဖြစ်ဖြစ် Os Installation လုပ်ပြီးသုံးတာမျိုးမဟုတ်တော့ပဲ Vagrant ဆိုသည့် command-line tool ကိုသုံးပြီး မိမိအသုံးပြုချင်သည့် os ကို hypervisor ပေါ်မှာ command နဲ့ တန်း run ပြီး တော့အသုံးပြုလို့ရတာပဲဖြစ်ပါတယ်။
ပုံမှန်အားဖြင့် Vagrant ကို developers တွေက သူတို့ development environment အဖြစ်အသုံး ပြုကြတာမျိုးပဲဖြစ်ပါတယ်။ Vagrant ကိုအသုံးပြုဖို့အတွက် Hypervisor တစ်ခုခုလိုအပ်မည်ဖြစ် ပြီး ဒီ Lab လေးမှာတော့ ကျွန်တော်က virtualbox ကို အသုံးပြုသွားမှာပဲဖြစ်ပါတယ်။
Vagrant Installation step by step
Vagrant ကို Installation မလုပ်ခင် prerequisite အနေနဲ့ ကျွန်တော်တို့ရဲ့ စက်ထဲမှာ virtualbox နဲ့ vagrant package ကိုအရင်သွင်းထားဖို့ လိုအပ်ပါသည်။ ကျွန်တော်ကတော့ ubuntu ပေါ်မှာ lab စမ်းပြမှာဖြစ်သည့်အတွက် Windows User တွေနဲ့တော့ package installation step ကတော့ ကွဲလွဲနေမည်ဖြစ်ပါသည်။
ubuntu ပေါ်မှာ virtualbox installation မလုပ်ရသေးဘူးဆိုရင်တော့ အောက်ပါ command ကို အသုံးပြုပြီးတော့ virtualbox ကို installation လုပ်နိုင်ပါတယ်။
sudo apt update
sudo apt install virtualbox
Windows User အတွက်ကတော့ virtualbox official website https://www.virtualbox.org/ သွားပြီး download ဆွဲပြီး install လုပ်နိုင်ပါတယ်။
နောက်ထပ် Vagrant Installation လုပ်ဖို့အတွက် Vagrant website ကို သွားပါမယ်။
အဲ့ link အတိုင်းသွားပြီး vagrant community version ကို download ဆွဲနိုင်ပါတယ်။ Windows User တွေကတော့ windows ကို ရွေးပြီး download ဆွဲနိုင်ပါတယ်။ Linux User တွေကတော့ Linux ကို ရွေးပြီးတော့ မိမိအသုံးပြုသည့် distro အတိုင်း download ဆွဲရမှာဖြစ်ပါတယ်။
ကျွန်တော်ကတော့ Ubuntu သုံးတာဖြစ်သည့်အတွက်ubuntu tab ထဲမှာရေးထားသည့် instruction အတိုင်း လုပ်သွားမှာဖြစ်ပါတယ်။
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /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
Vagrant ကို installation လုပ်ပြီးသွားရင်တော့ Terminal မှာ vagrant version ကိုစစ်ကြည့်လို့ရ ပါတယ်။
vagrant --version
အဲ့လိုစစ်လိုက်ရင်တော့ output အနေနဲ့ Vagrant Version ကို ပြန်ထုတ်ပေးမှာပဲဖြစ်ပါတယ်။ ဒါဆို ရင်တော့ vagrant installation step ကပြီးသွားပြီပဲဖြစ်ပါတယ်။
Getting Started with Vagrant
vagrant ကိုအသုံးပြုဖို့အတွက် အရင်ဆုံးအနေနဲ့ project directory လေးတစ်ခု ဆောက်ပေးရမှာ ဖြစ်ပါတယ်။
mkdir vagrant-lab
cd vagrant-lab
Directory ဆောက်ပြီးသွားရင်တော့ အဲ့ directory ထဲ ဝင်ပြီး vagrant init ဆိုတဲ့ command အသုံးပြုပေးရမှာဖြစ်ပါတယ်။ နောက်ထပ် သိထားရမှာတော့ Vagrant Boxes ဖြစ်ပြီး သူကတော့ ကျွန်တော်တို့ pre-build os image တွေကိုစုထားတဲ့ Vagrant Cloud ပဲဖြစ်ပါတယ်။ မိမိအသုံးပြု ချင်သည့် os ကို ရှာဖို့အတွက်အရင်ဆုံး အနေနဲ့ Vagrant Boxes မှာအရင်ရှာရမှာဖြစ်ပါတယ်။
https://app.vagrantup.com/boxes/search
ကျွန်တော်ကတော့အဲ့ထဲက bento/ubuntu-22.04 ဆိုသည့် image name ကိုအသုံးပြုမှာဖြစ်ပါ တယ်။ မိမိအသုံးပြုချင်သည့် image သိသွားပြီဆိုတော့ ခုနကတည်ဆောက်ခဲ့သည့် directory လေးမှာ အောက်ပါ command လေးကို ရိုက်ပေးရမည်ဖြစ်ပါသည်။
vagrant init bento/ubuntu-22.04
ထိုကဲ့သို့ရိုက်လိုက်တာနဲ့ bento/ubuntu-22.04 ဆိုသည့် image လေးကို download ဆွဲသွားမှာ ဖြစ်ပါတယ်။ download ဆွဲလို့ ပြီးသွားရင်တော့ အောက်ပါအတိုင်းပြမည်ဖြစ်ပါသည်။
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.
ပြီးရင်တော့ နောက်ထပ် vagrant up ဆိုသည့် command ရိုက်လိုက်တာနဲ့ virtualbox ပေါ်မှာ virtual machine တစ်ခု တည်ဆောက်သွားမှာပဲဖြစ်ပါတယ်။ အရင်ဆုံးအနေနဲ့ vagrant up command မရိုက်ခင်မှာ Vagrant Configuration File ထဲမှာconfig လေးတွေပြင်ပေးရပါဦးမယ်။ ကျွန်တော်တို့ခုနက vagrant init bento/ubuntu-22.04 ရိုက်လိုက်လို့ image download ဆွဲလို့ ပြီးသွားသည့်အချိန်မှာ ကျွန်တော်တို့ vagrant init ရိုက်လိုက်သည့် directory ထဲကို Vagrantfile ဆိုသည့် Vagrant Config File လေးက ရောက်လာမှာဖြစ်ပါတယ်။
ကျွန်တော်ကတော့ Vagrantfile config တွေပြင်ဖို့အတွက် vscode ကိုသုံးထားတာဖြစ်ပါတယ်။
# -*- 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|
config.vm.box = "bento/ubuntu-22.04"
config.vm.hostname= 'vagrant-lab'
# 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.56.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|
vb.name = "srv-01"
vb.cpus = "1"
#vb.gui = true
# Customize the amount of memory on the VM:
vb.memory = "2048"
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
# Ansible, Chef, Docker, Puppet and Salt 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
Vagrant.configure("2") do |config|
vagrant.configure ဆိုသည့် နေရာမှာတော့ ဘာမှပြင်စရာမလိုပါဘူး။ config.vm.box နေရာမှာ မိမိအသုံးပြုချင်သည့် Vagrant Boxes က image name ကိုထည့်ပေးရမည်ဖြစ်ပြီး config.vm.hostname နေရမှာတော့ Virtual Machine Hostname ကိုပေးချင်သည့် နာမည် ထည့်ပေးရမှာပဲဖြစ်ပါတယ်။
config.vm.box = "bento/ubuntu-22.04"
config.vm.hostname= 'vagrant-lab'
နောက်ထပ် virutalbox ရဲ့Host-only adapter Network ကိုအသုံးပြုရမှာဖြစ်သည့်အတွက် သူရဲ့ ip ကိုထည့်ပေးရမှာပဲဖြစ်ပါတယ်။
virutalbox ရဲ့Host-only adapter Network မှာအသုံးပြုထားတာက 192.168.56.1 ဖြစ်သည့် အတွက်ကျွန်တော်တို့ရဲ့ config.vm.network မှာတော့ အဲ့ဒီရဲ့ ip range ထဲမှာရှိသည့် ip ကိုထည့် ပေးရမှာဖြစ်ပါတယ်။
config.vm.network "private_network", ip: "192.168.56.10"
နောက်ဆုံးအဆင့်အနေနဲ့ ဘယ် vm provider ကိုအသုံးပြုမလဲဆိုတာရွေးခိုင်းမည်ဖြစ်ပါတယ်။ Vagrantfile ရဲ့ default config မှာတော့ virtualbox က default ဖြစ်နေမှာပဲဖြစ်ပါတယ်။
config.vm.provider "virtualbox" do |vb|
vb.name = "srv-01"
vb.cpus = "1"
vb.memory = "2048"
config.vm.provider ကတော့ virtualbox သုံးမှာဖြစ်သည့်အတွက် ဘာမှမပြင်တော့ပါဘူး။ vb.name မှာဆိုရင်တော့ virutalbox တွင် create လုပ်ရင်ပေးရသည့် vm name ကိုပဲ ပေးခိုင်း ခြင်းဖြစ်ပါသည်။ vb.cpus မှာတော့ မိမိအသုံးပြုမည့် cpu အရေအတွက်ကို ထည့်ပေးရမည်ဖြစ် ပြီး vb.memory မှာတော့ မိမိ vm မှာ အသုံးပြုချင်သည့် memory size ကိုထည့်ခိုင်းတာပဲဖြစ်ပါ သည်။
တခြား vm provider တွေအတွက်အသုံးပြုချင်ရင်တော့ Vagrant ရဲ့ Official Documentation ထဲမှာ ရေးပေးထားတာတွေရှိပါတယ်။ ကျွန်တော်ရေးပြတာထပ် Official Documentation ကိုပဲ ပိုပြီးဖတ်စေချင်တဲ့အတွက်ကြောင့် Documentation Link ကိုပဲ ထည့်ပေးထားပါတယ်။
https://developer.hashicorp.com/vagrant/docs
VagrantFile ထဲမှာ Config တွေအကုန်လုံးပြင်ပြီးသွားရင်ဆိုရင်တော့ vagrant up ရိုက်ရပါမည်။ vagrant up ဆိုသည့် command ကိုရိုက်လိုက်တာနဲ့ virtualbox ထဲမှာ vm တစ်လုံးတည်ဆောက် ပြီး virtual machine တစ်ခါတည်း run သွားမည်ဖြစ်ပါသည်။
အထက်ပါအတိုင်း ဘာ error မှမတက်ပဲပြီးသွားရင်တော့ configuration မှန်လို့ပဲဖြစ်ပါတယ်။ ဒါဆိုရင်တော့ virtual machine ထဲကို login ဝင်ဖို့အတွက် အဲ့ဒီ directory ထဲကနေပဲ
vagrant ssh
ဆိုသည့် command ကိုရိုက်ပြီး vm ထဲ login ဝင်လို့ရမည်ဖြစ်ပါသည်။
ဒါဆိုရင်တော့ ပုံပါအတိုင်း ကျွန်တော်တို့တည်ဆောက်ခဲ့သည့် vagrant-lab ဆိုသည့် အမည်ရှိသည့် virtual machine ထဲကို ရောက်သွားပြီပဲ ဖြစ်ပါတယ်။ traditional vm installation state လိုမျိုး installation state ကို အချိန်သီးသန့်ပေးစရာမလိုတော့ပဲ မိမိအသုံးပြုချင်သည့် development envrionment ကိုမြန်မြန်ဆန်ဆန် စမ်းသပ်နိုင်မှာပဲဖြစ်ပါတယ်။
Virtual Machine ပြန်ဖျက်ချင်ရင်တော့ vm ထဲကနေ exit လုပ်ပြီး vagrant-lab directory ထဲက နေပဲ
vagrant destroy
ဆိုသည့် command အသုံးပြုပြီးဖျက်နိုင်ပါသည်။ vagrant destroy ဆိုပြီးရိုက်လိုက်သည့် အခါ တွင် ဒီ vm ဖျက်မှာလားဆိုပြီး အတည်ပြုခိုင်းမှာဖြစ်ပြီးတော့ y ကိုရေးပြီး enter နှိပ်လိုက်ရင်တော့ virtualbox ထဲတွင် ရှိနေသည့် virtual machine ကို ဖြတ်သွားမှာပဲဖြစ်ပါတယ်။
ဒီလောက်ဆိုရင်တော့ vagrant အသုံးပြုနည်းကို တီးမိခေါက်မိ ရှိလောက်သွားမယ်ထင်ပါတယ်။နောက်ထပ်အားရင်အားသလို vagrant နဲ့ပတ်သက်သည့် အကြောင်းအရာများကိုလဲ ဆက်ရေးပေး သွားပါဦးမယ်။