Vagrant usesOracle¡¯s VirtualBox to build configurable, lightweight, and portable virtual machines dynamically..
¡¾Vagrant ʹÓÃOracle VM VirtualBox ¶¯Ì¬´´½¨ºÍÅäÖÃÇáÁ¿¼¶µÄ£¬¿ÉÖØÏֵ쬱ãЯµÄÐéÄâ»ú»·¾³¡£¡¿
2. VagrantÏÂÔØ:
http://downloads.vagrantup.com/tags/v1.0.5
3. Vagrant°²×°:
3.1. ÏÂÔØ²¢°²×°Oracle VM VirtualBox: ÀýÈçÔÚWindows»·¾³Ï£¬ÐèÒª°²×°VirtualBox-4.2.0-80737-Win.exe
https://www.virtualbox.org/wiki/Downloads
3.2. ÏÂÔØ²¢°²×°×îа汾µÄVagrant:
http://downloads.vagrantup.com/
[×¢]ÔÚ Windows and Mac OS X,vagrant ÃüÁîÓ¦¸Ã×Ô¶¯Ìí¼Óµ½»·¾³±äÁ¿PATH. µ«ÊÇÔÚÆäËû²Ù×÷ϵͳÏÂ, Äã±ØÐëÊÖ¶¯Ìí¼Ó/opt/vagrant/bin µ½»·¾³±äÁ¿PATH¡£
4. VagrantÃüÁî
Vagrant°²×°Íê³ÉÖ®ºó£¬ÎÒÃǾͿÉÒÔ´ÓÃüÁîÐÐͨ¹ývagrantÃüÁîÀ´½øÐвÙ×÷¡£vagrant ³£ÓÃÃüÁîÈçÏ£º
vagrant box add
vagrant box list
vagrant box remove
vagrant box repackage
vagrant init [box-name] [box-url]
vagrant up [vm-name] [--[no-]provision] [-h]
vagrant destroy [vm-name]
vagrant suspend [vm-name]
vagrant reload [vm-name]
vagrant resume [vm-name]
vagrant halt [vm-name]
vagrant status [vm-name]
vagrant package [vm-name] [--base name] [--output name.box][--include one,two,three] [--vagrantfile file]
vagrant provision [vm-name]
vagrant ssh [vm-name] [-c command] [-- extra ssh args]
vagrant ssh-config [vm-name] [--host name]
5. Vagrantfile
ÈκÎVagrant¹¤³Ì϶¼ÓÐÒ»¸öVagrantfile, ¾ÍÏñmakefileÒ»Ñù£¬VagrantfileÓÃÀ´ÅäÖÃvagrantµÄÐÐΪËù´´½¨ÐéÄâ»úµÄÐÅÏ¢£¬ÏÂÃæÊÇÒ»¸ö»ù±¾µÄVagrantfile£º
Vagrant::Config.run do |config|
# Setup the box
config.vm.box = "my_box"
end
6. ´´½¨µÚÒ»¸öVagrantÐéÄâ»·¾³ÒÔ¼°¹¤³Ì:
(1)´´½¨¹¤³ÌĿ¼£¬ ²¢ÇÒÖ´ÐÐvagrant initÃüÁ¸ÃÃüÁî»á²úÉú×î³õµÄ Vagrantfile
$ mkdir vagrant_guide
$ cd vagrant_guide
$ vagrant init
(2)Ìí¼ÓÒ»¸öBase Box:
Vagrant²»ÊÇ´ÓÍ·¿ªÊ¼´´½¨ÐéÄâ»ú£¬¶øÊǵ¼ÈëÒ»¸öÐé»úµÄbase image£¬ÔÚÕâ¸ö»ù´¡ÉϽøÐй¹½¨¡£ÕâЩimage¾Í½Ð×öBox.
Vagrant Ö§³Ö´Ó±¾µØÎļþϵͳ»òÕßHTTP URLÀ´Ìí¼Óboxes
$vagrant box add basehttp://files.vagrantup.com/lucid32.box
$vagrant box add base D:\lucid32.box
(3)ÅäÖÃProjectʹÓÃÕâ¸öBox: ÐÞ¸ÄVagrantfileΪÈçÏÂÄÚÈÝ£º
Vagrant::Config.run do |config|
config.vm.box = "base"
end
(4)Æô¶¯ÐéÄâ»ú
$vagrant up
(5)Í£µôÐéÄâ»ú
$vagrant destroy
(6) SSHÅäÖÃ
Vagrant ÌṩÁ˶ÔÐéÄâ»úµÄSSHÁ¬½Ó£¬Ö»ÐèÒªÖ´ÐÐÒ»¸öÃüÁ
$vagrant ssh
ÔÚWindows»·¾³Ï¿ÉÒÔʹÓÃPUTTY£¬ÅäÖÃÏÂÃæµÄÐÅÏ¢À´Á¬½ÓÐéÄâ»ú£º
hostname: localhost
port: 2222
Connection Type: SSH
User Name: vagrant
Password: vagrant
(7)·ÃÎʸղŴ´½¨µÄProject.
Vagrant ͨ¹ýVirtualBoxµÄshared folderÀ´Á¬½ÓÄãµÄapplicationºÍÐéÄâ»ú£¬ ĬÈϵÄshared folderµÄÎÀÊ¿ÊÇ/vagrant£¬ ËùÒÔÏëÒª²é¿´¸Õ²Å´´½¨µÄÏîÄ¿£¬Ö»ÐèÒªÖ´ÐУº
vagrant@lucid32:~$ ls /vagrant
index.html Vagrantfile
(8) Provisioning£º
ͨ³£Çé¿öÏÂBoxÖ»×ö×î»ù±¾µÄÉèÖ㬶ø²»ÊÇÒ»´Îµ½Î»µÄÉèÖúÃËùÓеĻ·¾³¡£Vagrantͨ³£Ê¹ÓÃchef»òÕßPuppetÀ´×ö½øÒ»²½µÄ»·¾³´î½¨¡£
»Øµ½¸Õ²Å´´½¨µÄindex.html£¬ÎÒÃÇÐèÒª°²×°Apache¡£ÎÒÃÇÏÂÃæÓÃPuppetÀ´Íê³ÉÕâÒ»ÉèÖá£
1. ÔÚÏîÄ¿µÄ¸ùĿ¼Ï´´½¨Îļþ¼Ðmanifests£¬È»ºóÔÚ¸ÃÎļþ¼ÒÖд´½¨PuppetµÄÅäÖÃÎļþdefault.pp£¬¸ÃÎļþÄÚÈÝÈçÏ£º
# Basic Puppet Apache manifest
class apache {
exec { 'apt-get update':
command => '/usr/bin/apt-get update'
}
package { "apache2":
ensure => present,
}
service { "apache2":
ensure => running,
require => Package["apache2"],
}
}
include apache
2. ÔÚVagrantfileÀïÌí¼Ó¶ÔPuppet provisioningµÄÖ§³Ö£º
Vagrant::Config.rundo |config|
config.vm.box= "base"
# Enable the Puppet provisioner
config.vm.provision:puppet
end
(9) ÔËÐÐProject
ΪÁËʹpuppetµÄÅäÖÃÉúЧ£¬Èç¹û²»ÖØÆôÐé»ú£¬ÔòÐèÒªÖ´ÐÐvagrant reloadÃüÁî¡£
$ vagrant reload
ÒòΪûÓÐÅäÖÃport forwarding£¬ËùÒÔÄ㻹²»ÄÜ´Ó±¾µØä¯ÀÀÆ÷²é¿´ProjectµÄÊä³ö¡£Ö»ÄÜSSHµ½ÐéÄâ»úÉϲ鿴127.0.0.1µÄÊä³ö£º
(10) ½øÐж˿ÚÓ³Éä
ÐÞ¸ÄVagrantfile£¬ Ìí¼Ó±¾µØ¶Ë¿ÚºÍÐé»ú¶Ë¿ÚµÄÓ³Éä¹ØÏµ£¬ È»ºóÖ´ÐÐvagrant reload, È»ºóÄã¾Í¿ÉÒÔͨ¹ý±¾µØä¯ÀÀÆ÷À´·ÃÎÊ£ºhttp://localhost:4567.
Vagrant::Config.run do |config|
# Forward guest port 80 to host port 4567
config.vm.forward_port 80, 4567
end
7. ´ò°ü Packaging
1. ´´½¨Ò»¸öеÄÎļþVagrantfile.pkg£¬ÄÚÈÝÈçÏ£º
Vagrant::Config.run do |config|
# Forward apache
config.vm.forward_port 80, 8080
end
2. ´ò°üProject
$ vagrant package --vagrantfile Vagrantfile.pkg
8. ´ò°üÍê³Éºó£¬ÔÚ¹¤³Ì¸ùĿ¼Ï¾ͻáÉú³Épackage.box£¬±ðÈ˾ͿÉÒÔʹÓÃÕâ¸öBoxÁË£º
$ vagrant box add my_box /path/to/the/package.box
$ vagrant init my_box
$ vagrant up
À´Ô´£ºLinuxÉçÇø