Vagrant入门[转]
Vagrant是一个简单易用的部署工具,用英文说应该是orchestration tool。它能帮助开发人员迅速的构建一个开发环境,帮助测试人员构建测试环境。
Vagrant的基本工作原理大致如下:
- 首先,通过读取配置文件,获知用户需要的环境的操作系统、网络配置、基础软件等信息;
- 然后,调用虚拟化管理软件的API(VMWare Fusion,Oracle VirtualBox, AWS, OpenStack等)为用户创建好基础环境;
- 最后,调用用户定义的安装脚本(shell,puppet,chef)安装好相应的服务和软件包;
Vagrant的主要应用场景
- 开发环境部署
作为开发人员可能会涉及到不同的开发语言和不同的包依赖,搭建开发环境总是一件很麻烦的事情,有些语言有强有力的项目构建工具支持,比如Java的Maven,而有些语言则没有这么方便的工具,比如Python。特别是随着时间的推移,开发环境也会变得很混乱。
Vagrant通过脚本文件的描述创建一个虚拟机实例,并通过shell脚本或puppet配置好开发环境,解决了开发环境的自动化搭建。同时,vagrant创建的开发环境也能被轻松的清理和共享,特别是对于一个团队,构建标准的开发环境将变得很轻松。 - 测试环境部署
对于测试环节中的集成测试,特别是分布式系统的集成测试,测试环境的搭建也是一个费时费力的工作。Vagrant支持多个实例的部署,可以在单机上创建多个虚拟机实例进行自动化的集成测试。如果单机的测试环境还不够大,也可以将这个工作交给AWS和OpenStack这样的云去完成。
Vagrant的主要概念
- Provider
Provider指的是为Vagrant提供虚拟化支持的具体软件,比如vmware或virtual box。 - Box
Box代表虚拟机镜像。Vagrant根据Porvider的不同提供了很多的基础镜像(通过url从s3上获取),用户可以根据自己的需求使用vagrant package制作属于自己的box。 - Project
一个目录和目录中的Vagrantfile就组成了vagrant的一个项目,项目下可以有子项目,子项目中的Vagrantfile配置将继承和重写父项目的配置。项目的虚拟机实例并不会存储在这个目录(存储在~/.vagrant.d/box下),所以可以通过git等版本管理工具来管理项目。 - Vagrantfile
Vagrant的配置文件,使用Ruby的语法描述。里面定义了项目所使用的box,网络,共享目录,provision脚本等。当vagrant up命令运行时,将读取当前目录的Vagrantfile。 - Provisioning
Provisioning指的是虚拟机实例启动后,所需要完成的基础配置工作,比如说安装LAMP服务等。Vagrant支持使用shell,puppet,chef来完成provisioning工作。 - Plugin
Vagrant提供了插件机制,可以很好的扩展对宿主机OS, GuestOS,Provider,Provisioner的支持,比如vagrant的aws和openstack支持都是通过plugin来实现的。
QuickStart
安装Provider
我们使用VirtualBox作为虚拟化的Provider,下载并安装VirtualBox即可。https://www.virtualbox.org/wiki/Downloads
安装Vagrant
Vagrant提供了windows,mac,deb和rpm的安装包,下载最新版本1.3.5的安装即可。Ubuntu软件仓库的版本是1.0.1的,比较老了,在读取配置文件的时候可能会遇到问题,所以不建议直接从仓库安装。
http://downloads.vagrantup.com/
创建项目
创建一个文件夹,并进入
mkdir linux-dev
cd linux-dev
初始化项目
vagrant init precise64 http://files.vagrantup.com/precise64.box
运行玩命令后,我们应该会发现在当前目录下出现了Vagrantfile文件,内容如下:
# -*- mode: ruby -*-
# vi: set ft=ruby : # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# All Vagrant configuration is done here. The most common configuration
# options are documented and commented below. For a complete reference,
# please see the online documentation at vagrantup.com. # Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "precise64" # The url from where the 'config.vm.box' box will be fetched if it
# doesn't already exist on the user's system.
config.vm.box_url = "http://files.vagrantup.com/precise64.box" ...
这个文件有详细的注释和说明,其中config.vm.box指定了所使用的box,如果该box不存在于本地,vagrant将会自动从config.vm.box_url处下载并添加到本地。
从名字可以看出这个box是一个ubuntu server 12.04 64位的virtual box镜像。
配置provisioning脚本
我们通常在安装完操作系统后希望能装一些软件或做一些配置,provisioning脚本正好能完成这个工作。比如完成操作系统安装后自动安装vim和git。
编辑Vagrantfile,添加一行
# The url from where the 'config.vm.box' box will be fetched if it
# doesn't already exist on the user's system.
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
# 添加下面的这行
config.vm.provision "shell", path: "provision.sh"
这一行指定了provision使用shell脚本,shell脚本位于与Vagrantfile同目录下的provision.sh
创建provision.sh
sudo apt-get install vim git -y
启动实例
在linux-dev目录下运行vagrant up,vagran就会启动由该目录下Vagrantfile指定的虚拟机实例。
首先,vagrant会去本地查找box,如果没有就从远程下载(从s3上下载很慢,可以先用迅雷离线下载到本地,然后再通过vagrant box add命令来添加);
然后,vagrant就会启动虚拟机,做一些网络配置,并将当前目录挂载到虚拟机的/vagrant下,使其能在虚拟机和物理机直接共享。
最后,vagrant会开始provisioning的过程,为虚拟机配置基础的软件(只在第一次启动时进行,以后可通过vagrant provision命令触发)。
AlexYang-mba:linux-dev alex$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'precise64'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Machine booted and ready!
[default] The guest additions on this VM do not match the installed version of
VirtualBox! In most cases this is fine, but in rare cases it can
cause things such as shared folders to not work properly. If you see
shared folder errors, please update the guest additions within the
virtual machine and reload your VM. Guest Additions Version: 4.2.0
VirtualBox Version: 4.3
[default] Mounting shared folders...
[default] -- /vagrant
vagrant provision [default] Running provisioner: shell...
[default] Running: /var/folders/cy/jfbhmrh95bx7q5nqvg6h4qv00000gn/T/vagrant-shell20131023-1280-yxw9sy
stdin: is not a tty
Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
git-man liberror-perl libgpm2 libpython2.7 patch vim-runtime
SSH登陆
使用vagrant ssh命令可以登陆到虚拟机上,进行相应的操作,比如:
vagrant@precise64:~$ ls -lah /vagrant/
total 16K
drwxr-xr-x 1 vagrant vagrant 170 Oct 23 07:54 .
drwxr-xr-x 24 root root 4.0K Oct 23 07:19 ..
-rw-r--r-- 1 vagrant vagrant 32 Oct 23 07:54 provision.sh
drwxr-xr-x 1 vagrant vagrant 102 Oct 23 05:51 .vagrant
-rw-r--r-- 1 vagrant vagrant 4.6K Oct 23 07:45 Vagrantfile
关闭实例
关闭实例可以使用三种方式vagrant suspending, vagrant halt, vagrant destroy。
- suspending,暂停虚拟机,保存虚拟机当前的状态(内存和磁盘均不释放),可以使用vagrant up命令恢复运行;
- halt,关机,虚拟机停止运行,但是虚拟机实例保留,不销毁,可以理解为是正常的关机;
- destroy,销毁虚拟机,虚拟机的实例被销毁;
相关资源
文档: http://docs.vagrantup.com/v2/
Vagrant入门[转]的更多相关文章
- Vagrant入门
简单地说,Vagrant让我们可以通过代码的方式快速地.可重复地创建针对不同虚拟环境的虚拟机,包括Virtualbox.AWS.Docker等.它使得我们可以一次性地.自动创建多个环境相同的虚拟机,对 ...
- [转] Vagrant入门
[From] https://www.cnblogs.com/davenkin/p/vagrant-virtualbox.html 简单地说,Vagrant让我们可以通过代码的方式快速地.可重复地创建 ...
- vagrant 入门
0.说明 本门所有的操作都是基于mac.windows可做相应调整,大体流程是一样的. 1.什么是vagrant 通俗来讲vagrant是一个通过命令行,来管理虚拟机的工具,vagrant本身并没有提 ...
- Vagrant入门二(转)
原文:https://github.com/zhjchina/Go-best-practice/edit/master/ebook/zh/01.3.md 3 Vgrant使用入门 前面我们已经学会了如 ...
- Vagrant入门一(转)
原文: https://github.com/astaxie/Go-best-practice/blob/master/ebook/zh/01.2.md 1.2 Vagrant安装配置 实际上Vagr ...
- Vagrant 入门 - 配置
原文地址 现在我们已经有了一个运行 Ubuntu 的虚拟机,并且可以在宿主机上编辑文件并自动同步到虚拟机.现在让我们安装一个 web 服务器,通过服务器访问这些文件. 可以通过 SSH 进入并安装一个 ...
- Vagrant 入门 - box
原文地址 Vagrant 使用基础镜像来快速克隆虚拟机,而不是从头开始构建虚拟机.这些基础镜像在 Vagrant 中被称为"box",并且指定用于 Vagrant 环境的 box ...
- vagrant 入门3
创建第一个Vagrant虚拟环境以及工程(续集): (8) Provisioning: 通常情况下Box只做最基本的设置,而不是一次到位的设置好所有的环境.Vagrant通常使用chef或者Puppe ...
- vagrant 入门4
7. 打包 Packaging , 8080 end 2. 打包Project $ vagrant package --vagrantfile Vagrantfile.pkg 8. 打包完成后,在工程 ...
随机推荐
- ViewController详解
一.生命周期 当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1. alloc 创建对象,分配空间2.init (initWit ...
- IOS成长之路-Nsstring中搜索方法rangeOfString
NSString *str1 = @"can you \n speak English"; NSString *str = @"\n"; //在str1这个字符 ...
- mybatis之mapper.xml分析
select: id:方法名,在同一个mapper.xml中,要保持唯一 parameterType:指定输入的参数类型,不是必须的,如果不指定,mybatis会自动识别(推荐指定). resultT ...
- Tree( 树) 组件[2]
本节课重点了解 EasyUI 中 Tree(树)组件的使用方法, 这个组件依赖于 Draggable(拖动)和 Droppable(放置)组件.一. 异步加载如果想从数据库里获取导航内容, 那么就必须 ...
- angularJS环境安装
第一步: 安装node.js,进入node.js官网(http://nodejs.org/)下载安装相应的node.js版本:
- ref和out与SQL中的output
什么时候会需要使用ref和out 有时,我们会需要获取某个值在方法中的运行状态,根据定义的方法,我们仅仅能够获得一个返回值,但是,有时我们也许想获取多个值,通过返回值就不能返回这样的信息,我们可以通过 ...
- QML学习心得
Qt Quick之于QML,正如Qt 之于 C++,QML是Qt中开发的一个新的语言,而Qt Quick是这个语言的一个组件库,其中包含了很多用QML写的可以现成使用的组件. QML Hello Wo ...
- iOS中的UIWindow
UIWindow的作用 UIWindow主要有两个作用: 1 作为UIView视图的最顶层容器,包含所有要显示的UIView 2 传递触摸,非触摸,键盘事件,其中传递非触摸和键盘事件时,UIWindo ...
- CentOS 5.5安装图解教程
说明:实际生产环境中,CentOS 5.5这个版本相当稳定,而且硬件兼容性也很好,是很多服务器装机者的首选系统,下面介绍CentOS 5.5的具体安装过程 说明:实际生产环境中,CentOS 5. ...
- HTML&CSS基础学习笔记1.11—导航栏
上文我们介绍到的<a>标签,由于<a>标签可以用来跳转,所以我们可以拿<a>标签来生成网页的导航栏. 其实在实际运用中,<a>标签就经常会被用来生成导航 ...