ºìÁªLinuxÃÅ»§
Linux°ïÖú

Vagrant¿ìËÙÈëÃÅ

·¢²¼Ê±¼ä:2014-07-07 10:39:16À´Ô´:ºìÁª×÷Õß:velcbo
1. Vagrant¹¦ÄÜ:
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ÉçÇø
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ