Vagrant Introduction
Vagrantprovides easy to configure, reproducible, and portable work environments builton top of industry-standard technology and controlled by a single consistentworkflow to help maximize the productivity and flexibility of you and your team.
Toachieve its magic, Vagrant stands on the shoulders of giants. Machines areprovisioned on top of VirtualBox,VMware, AWS, or any other provider. Then, industry-standard provisioning toolssuch as shell scripts, Chef, or Puppet, can be used to automatically installand configuresoftwareon the machine.
Writtenby Ruby.
More refer:
Official website:
Mirror site: (download box file from here)
Vagrant commands
vagrant -h (or vagrantcommand -h)
box manages boxes: installation, removal, etc.
connect connect to a remotely shared Vagrant environment
destroy stops and deletes all traces of thevagrant machine
global-status outputs statusVagrant environments for this user
halt stops the vagrant machine
help shows the help for a subcommand
init initializes a new Vagrant environment bycreating a Vagrantfile
login log in to HashiCorp's Atlas
package packages a running vagrant environment intoa box
plugin manages plugins: install, uninstall,update, etc.
provision provisions the vagrant machine
push deploys codein this environment to a configured destination
rdp connects tomachine via RDP
reload restarts vagrantmachine, loads new Vagrantfileconfiguration
resume resumea suspended vagrant machine
share shareyour Vagrant environment with anyone inthe world
ssh connects tomachine via SSH
ssh-config outputs OpenSSH valid configuration to connect to the machine
status outputs statusof the vagrant machine
suspend suspends themachine
up starts andprovisions the vagrant environment
version prints currentand latest Vagrant version
Vagrant configuration -- Vagrantfile (gave 3 examples)
- following case for single machine
Vagrant.configure("2") do |config|
config.vm.define :node1 do |node1|
node1.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "node1", "--memory", "1024"] #v.gui = true
end
node1.vm.box = " centos66"
node1.vm.hostname = "node1"
node1.vm.network :public_network, ip:"192.168.199.76", bridge: "eth0"
node1.vm.synced_folder "C:/workstation", "/data"
end
end
- following two case for multi machine
case 1:
Vagrant.configure("2") do |config|
config.vm.define :node1 do |node1|
node1.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "node1", "--memory", "1024"]
#v.gui = true
end
node1.vm.box = "centos66"
node1.vm.hostname = "node1"
node1.vm.network :public_network, ip:"192.168.199.76", bridge: "eth0"
end
config.vm.define :node2 do |node2|
node2.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "node2", "--memory", "1024"]
end
node2.vm.box = "centos66"
node2.vm.hostname = "node2"
node2.vm.network :public_network, ip: "192.168.199.77", bridge: "eth0"
#node2.vm.synced_folder "/u2/vm/mysql/node2_data", "/data"
end
end
case 2:
Vagrant.configure("2") do |config|
{
:node1 => {
:box => 'centos66',
:box_url => 'http://192.168.1.200/vms/centos66_v2.box',
},
:node2 => {
:box => 'centos66',
:box_url => 'http://192.168.1.200/vms/centos66_v2.box',
},
}.each do |name,cfg|
config.vm.synced_folder "./", "/data/web/apache_default/",
owner: "apache", group: "deploycode"
config.vm.define name do |local|
local.vm.box = cfg[:box]
local.vm.box_url = cfg[:box_url]
local.vm.network "public_network"
#local.vm.network "forwarded_port", guest: 80, host: 2080,
#auto_correct: true
#local.vm.network "forwarded_port", guest: 3306, host: 3310,
#auto_correct: true
local.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", 512, "--cpus", 1]
end
end
end
end
Vagrantfile parameters explain
node1.vm.provider"virtualbox " 定义使用virtualbox作为虚拟化平台
v.customize["modifyvm", :id,"--name", "node1", "--memory", "1024"] 定义虚拟机大小
v.gui= true 定义启动虚拟机的时候是否启动GUI界面,true为启动,false不启动
node1.vm.box= "centos66" 定义虚拟机使用哪个box文件
node1.vm.hostname= "node1" 定义虚拟机的主机名
node1.vm.synced_folder“ C:/workstation”,“ /data ” 把本地文件夹共享给虚拟机,支持逻辑路径,即./
node1.vm.network:public_network, ip:“192.168.199.76”,bridge: “eth0 定义虚拟的网络类型,分配IP,使用网桥的方式并绑定到eth0上
-- 网络类型有:
Public network:公共网络(虚拟机和宿主机一样的网络)
eg: config.vm.network" public_network", ip: "192.168.1.200 "
Privatenetwork:私有网络(宿主机可以访问虚拟机,虚拟机间可以相互访问,
虚拟机可以访问外网)
eg: config.vm.network" private_network ", ip: "192.168.1.200"
Forwardedport:端口映射,把宿主机的某一端口映射到虚拟机的某一端口上
eg: config.vm.forwarded_port80,8080, protocol: “udp” 默认只转发tcp协议
包
Vagrantfile complete case
cd C:\workstation
Download a box file into this directory,such ascentos66_v2.box
vagrantbox add centos66 centos66_v2.box
vagrantbox list
vagrant init
Modified the Vagrantfile as before
vagrant up centos66
vagrant status centos66
Then you can login into this machine and install MySQL
- ip:port -> 127.0.0.1:2222
- username:password -> vagrant:vagrant
- login to super user(root) with sudo su -
vagrant halt
vagrant package --base centos66 --output centos66_new.box --vagrantfile Vagrantfile
vagrant destroy centos66
vagrant box remove centos66