Vagrant能够为你提供可配置、可再生、便携的工做环境,它主要是一个中间层技术,它的下层是VirtualBox, VMware, AWS或者其余provider,它的上层是provisioning工具,好比shell scripts, Chef, or Puppet等能够自动化安装和配置软件的工具。 html
对于开发人员来讲,Vagrant能够帮你统一团队成员的开发环境。若是你或者你的伙伴建立了一个Vagrantfile,那么你只须要执行vagrant up就好了,全部的软件都会安装而且配置好。团队成员能够经过相同的Vagrantfile来建立他们的开发环境,不管他们是在Linux, Mac OS X, 或者Windows下,这样就能够保证你团队成员的代码是跑在相同的环境中,从而避免使人烦躁的【在个人机器上是能够的】问题。 shell
对于运维人员来讲,Vagrant能够给你提供一次性,而且与线上一致的服务器环境,你能够利用VirtualBox或者VMware来测试你的shell scripts, Chef cookbooks, Puppet modules等管理脚本。你不须要再苦逼的登陆到线上服务器提心吊胆的测试了,Vagrant能够解救你。 apache
对于设计人员来讲,Vagrant能够帮你处理一切,你只须要专一在设计上就行了。一旦开发人员帮你配置好了Vagrant以后,你只须要执行vagrant up,而后开始设计。 bootstrap
Vagrant的安装很是简单,直接下载对应操做系统的版本就能够了。 浏览器
$ vagrant init hashicorp/precise32 $ vagrant up
执行以上命令以后,你已经拥有了一个Ubuntu 12.04 LTS 32-bit系统运行在VirtualBox中。 你能够经过vagrant ssh登陆到这个虚拟机中,若是你不须要它了,能够经过vagrant destroy来销毁。 bash
创建Vagrant项目的第一步是配置Vagrantfile。执行以下命令 服务器
$ mkdir my_vagrant $ cd my_vagrant $ vagrant init
这会在当前目录下生成一个Vagrantfile文件,这个文件就是一切的开始,对了,你最好把它添加到版本库中,这样你的小伙伴也能够经过它来初始化开发环境了。 网络
Vagrant使用的image叫作box,若是你执行过上面的命令,那么你已经在本地拥有了一个box。若是没有执行,那么你须要执行 运维
$ vagrant box add hashicorp/precise32
这会从Vagrant Cloud中下载hashicorp/precise32。 咱们接下来须要配置咱们的项目来使用这个box,编辑Vagrantfile文件并修改成: ssh
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise32" end
除了hashicorp/precise32,你能够在Vagrant Cloud找到更多适合你的box。
$ vagrant up
就这么简单。完成以后,你就拥有了一个Ubuntu系统,你能够经过
$ vagrant ssh
登陆它,而后随意执行任何命令,除了rm -rf /,缘由接下来讲明。
虽然说如此容易的启动一个虚拟机的确很酷,但不是全部人都喜欢经过终端来编辑文件(Vim党和Emacs党勿喷),因此Vagrant提供了一个目录同步的功能。默认状况下Vagrant会把你的项目目录(存储Vagrantfile的那个)与虚拟机中的/vagrant进行同步(这就是为何你不要执行rm -rf /的缘由,不然你会把项目目录删掉)。咱们能够登陆到虚拟机上验证一下。
$ vagrant up ... $ vagrant ssh ... vagrant@precise32:~$ ls /vagrant Vagrantfile
若是你不确信,能够建立一个文件看看:
vagrant@precise32:~$ touch /vagrant/foo vagrant@precise32:~$ exit $ ls foo Vagrantfile
怎么样?没骗你吧。经过目录同步功能,你还能够继续使用最爱的编辑器来修改虚拟机中的文件。
假设咱们的业务须要安装Apache,传统的作法是在虚拟机上手动安装并配置,若是这样那么使用Vagrant的人都须要重复一遍。幸亏Vagrant提供了自动配置(automated provisioning)的功能。经过这个特性,Vagrant会在你执行vagrant up的时候自动安装所需的软件。
在你的项目目录(即包含Vagrantfile的目录)下建立Bash脚本bootstrap.sh,内容以下:
#!/usr/bin/env bash apt-get update apt-get install -y apache2 rm -rf /var/www ln -fs /vagrant /var/www
接下来,咱们来配置让Vagrant在启动虚拟机的时候自动执行以上脚本,在Vagrantfile中添加以下内容:
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise32" config.vm.provision :shell, path: "bootstrap.sh" end
provision这一行告诉Vagrant使用shell provisioner来配置虚拟机,要执行的脚本是bootstrap.sh。
接下来执行vagrant up来启动虚拟机,以后你能够登陆到虚拟机来验证Apache时候已经安装成功:
$ vagrant ssh ... vagrant@precise32:~$ wget -qO- 127.0.0.1
老是在终端里边访问Apache不是什么好的主意,因此这个部分咱们会对Vagrant的网络进行配置,让它能够经过宿主机器(Host machine)来访问。
咱们用端口映射来实现对Apache服务的访问,编辑Vagrantfile文件以下:
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise32" config.vm.provision :shell, path: "bootstrap.sh" config.vm.network :forwarded_port, host: 4567, guest: 80 end
forwarded_port这一行把宿主机器的4567端口映射到了客户机器(Guest machine)的80端口。而后经过vagrant reload重启虚拟机,重启完成以后你用浏览器打开 http://127.0.0.1:4567就能够访问到WEB页面了。