Vagrant是一種開源軟件,它爲跨衆多操做系統構建可重複的開發環境提供了一種方法。Vagrant使用提供者(provider)來啓動隔離的虛擬環境。默認的提供者是Virtualboxhtml
Vagrant ( http://www.vagrantup.com/ ) is a powerful development tool, whichnode
lets you manage and support the virtualization of your development environment.linux
Instead of running all your projects locally on your own computer, having to jugglegit
the different requirements and dependencies of each project, Vagrant lets you rungithub
each project in its own dedicated virtual environment.web
Vagrant uses Providers to integrate with the third-party virtualization software,docker
which provides the virtualized machines for our development environment. Theshell
default provider is for Oracle's VirtualBox however, there are providers to workapache
with Amazon Web Services and VMware Fusion. The entire configuration is storedubuntu
in simple plain text files. The Vagrant configuration (Vagrantfile), Puppet, and Chef
manifests are simply written in text files in a Ruby Domain Specific Language. This
means we can easily share the configurations and projects with colleagues, using
Version Control Systems such as Git or Subversion.
http://ju.outofmemory.cn/entry/52470
vagrant能夠幫助用戶管理/部署虛擬機的程序。docker是一個幫助用戶建立/運行/管理基於lxc的linux container的程序。coreos是一個專門爲運行linux container而設計的發行版。
https://atlas.hashicorp.com/boxes/search
https://docs.vagrantup.com/v2/providers/ VMWare和Virtualbox等各類提供者
Vagrant can be installed on Linux, Windows, and Mac OS X, and although it
uses Ruby, the package includes an embedded Ruby interpreter. The only other
requirement is a virtualization tool such as Oracle's VirtualBox. The Oracle's
VirtualBox provider is available for free, and is included built-in with Vagrant
http://downloads.vagrantup.com
Each virtual machine starts with what Vagrant calls a base box. This is a specially
packaged version of an operating system with some specific configurations in
place. The number of configurations and packages installed on this packaged
operating system is typically minimal (containing only a few tools which allow it
to communicate with Vagrant).
Ubuntu的幾個box
Ubuntu10
• Lucid32 is available at http://files.vagrantup.com/lucid32.box
• Lucid64 is available at http://files.vagrantup.com/lucid64.box
Ubuntu12
• Precise32 is available at http://files.vagrantup.com/precise32.box
• Precise64 is available at http://files.vagrantup.com/precise64.box
Ubutnu14
vagrant init ubuntu/trusty64; vagrant up --provider virtualbox
vagrant init precise64 http://files.vagrantup.com/precise64.box
Vagrantfile生成[ruby]
vagrant init base64
vagrant init
vagrant box add <name> <url> [--provider provider] [--force]
vagrant up
Vagrant will then perform the following:
• Copy the base box
• Create a new virtual machine with the relevant provider (the default
being VirtualBox)
• Forward any configured ports; by default, it will forward port 22 (SSH) on
the VM to port 2222 on the host; this will allow us to connect to the VM
• Boot (power up) the VM
• Configure and enable networking, so that we can communicate with the VM
• Map shared folders between the host and the guest (by default, it will map
the folder containing the Vagrant project to /vagrant on the guest machine)
• Run any provisioning tools that are set up such as Puppet, Chef, or
SSH provisioning
vagrant suspend
vagrant resume
vagrant halt
vagrant destroy
vagrant ssh
Port forwarding
Vagrantfile 文件中進行端口映射
config.vm.network :forwarded_port, guest: 80, host: 8888
Synced folders
config.vm.synced_folder "/Users/michael/assets/" "/var/www/assets"
The first parameter is the path to the folder on our machine, the second being the
mount point on the VM.
Networking
config.vm.network :private_network, ip: "192.168.1.100"
Auto-running commands
config.vm.provision :shell, :inline => "sudo apt-get update"
config.vm.provision :shell, :path => "provision.sh" (the location of the
script specified is relative to our project root, that is, /vagrant )
Puppet modules
http://docs.puppetlabs.com/references/latest/type.html
http://forge.puppetlabs.com/
puppet apply --modulepath=/home/michael/provision/modules /home/michael/provision/manifests/default.pp
獨立運行模式
config.vm.provision :puppet do |puppet|
puppet.manifests_path = "provision/manifests"
puppet.manifest_file = "default.pp"
puppet.module_path = "provision/modules"
end
client/server模式
config.vm.provision :puppet_server do |puppet|
puppet.puppet_server = "puppet.internal.michaelpeacock.co.uk"
puppet.puppet_node = "vm.internal.michaelpeacock.co.uk"
end
SSH
config.vm.provision :shell, :path => "provision/setup.sh"
config.vm.provision :shell, :inline => "apt-get install apache2"
vagrant provision 命令能夠從新進行provisioning
Vagrantfile的配置
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.define :server1 do |server1|
server1.vm.box = "precise64"
server1.vm.network :private_network, ip: "10.11.1.100"
end
config.vm.define :server2 do |server2|
server2.vm.box = "precise64"
server2.vm.network :private_network, ip: "10.11.1.101"
end
end
1. Power up the project ( vagrant up )
2. Connect to server1 ( vagrant ssh server1 )
3. Ping server2 from server1 ( ping 10.11.1.101
不一樣的配置
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.define :server1 do |server1|
server1.vm.box = "precise64"
server1.vm.network :private_network, ip: "10.11.1.100"
server1.vm.provision :puppet do |puppet|
puppet.manifests_path = "provision/manifests"
puppet.manifest_file = "server1.pp"
puppet.module_path = "provision/modules"
end
end
config.vm.define :server2 do |server2|
server2.vm.box = "precise64"
server2.vm.network :private_network, ip: "10.11.1.101"
server2.vm.provision :puppet do |puppet|
puppet.manifests_path = "provision/manifests"
puppet.manifest_file = "server2.pp"
puppet.module_path = "provision/modules"
end
end
end
|-- provision
| |-- manifests
| | -- init.pp
| -- modules
-- Vagrantfile
根下的Vagrantfile文件內容
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.provision :shell, :inline => "apt-get update"
config.vm.box = "precise64"
config.vm.network :forwarded_port, guest: 80, host: 8080
config.vm.provision :puppet do |puppet|
puppet.manifests_path = "provision/manifests"
puppet.module_path = "provision/modules"
puppet.manifest_file = "default.pp"
end
end
目錄provision下是Puppet使用的各模塊的安裝和配置文件
http://pan.baidu.com/s/1ntKFSVn#path=%252Fshare vagrant_lamp_stack.zip
1.安裝VirtualBox虛擬機
a) 網絡須要設置爲NAT
b) 虛擬機名字:vagrant-ubuntu-raring
c) hostname : vagrant-ubuntu-raring
d) Domain: vagrantup.com
e) Root password: vagrant
f) Main account username: vagrant
g) Main account password: vagrant
h) install openssh-server
2.Install Guest Additions
a) sudo apt-get install linux-headers-$(uname -r) build-essential
b) sudo mount /dev/cdrom /media/cdrom
c) sudo sh /media/cdrom/VBoxLinuxAdditions.run
3.Vagrant authentication
a) sudo groupadd admin
b) sudo usermod -a -G admin vagrant
4.vi sudo 修改
a) %admin ALL=(ALL) NOPASSWD: ALL
b) Defaults env_keep="SSH_AUTH_SOCK"
c) #Default requiretty
5.ssh無祕碼登錄
a) wget https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub –o ~/.ssh/authorized_hosts
b) chmod 0644 ~/.ssh/authorized_keys
6.Provisioners
a) sudo apt-get install puppet
b) Chef
7.Cleanup
a) rm –rf /tmp/*
b) sudo apt-get clean
8.Export
a) vagrant package --base vagrant-ubuntu-raring
b) website: http://docs.vagrantup.com/v2/cli/package.html
測試本身的box
$vagrant box add /../../my.box
$vagrant init my
$vagrant up
如上的過程就可創建本身的box
https://atlas.hashicorp.com/boxes/search 這裏有不少開放的box