Vagrant 是一个创建和分发虚拟化开发环境的工具,使用ruby编写,本身并不包含虚拟机管理软件,因此我们需要配合Vagrant安装一个虚拟机软件。Vagrant支持VMware, Virtual Box, Hyper-V 等多种虚拟机软件,我选择的是Virtual Box,免费,跨平台。

为什么有了虚拟机软件还需要使用Vagrant? 因为简单的虚拟机并不能满足我们的需要,我们希望一个新的环境,开机就帮我们解决了一切,包括特定版本的操作系统、定制软件环境安装、系统设置(时区、输入法等)等等。使用Vagrant可以方便的帮助我们搭建系统,以及之后自动的管理端口映射/软件包安装等等问题。同时,更重要的,Vagrant还可以方便的设定同步文件夹,让我们在宿主机内对程序的修改,可以方便的同步到客户机,在调试程序时,这是一个非常优秀的特质。除此之外,还有一些其他的特性,比如自动化的应用部署,需要我们自行去挖掘。

一、安装

1、安装virtualbox

2、安装vagrant

从官方网站下载安装即可。

二、初始化

1、创建工作目录

该工作目录用于存储虚拟机配置以及共享目录本地目录

$ mkdir vagrant
$ cd vagrant

2、查找基础模板

vagrant用户在网上共享了基于各种操作系统的精简系统的模版(base box),从以下两个网站中可以查找。

比如,我们选定了 https://atlas.hashicorp.com/boxes/search 上的box-cutter/ubuntu1504-desktop,导入模板box

$ vagrant box add box-cutter/ubuntu1504-desktop
$ vagrant box list

box导入之后将存储于%userprofile%/.vagrant.d/,即VAGRANT_HOME变量指向的位置,也可以通过其他渠道将box下载到本地之后再导入。

3、初始化一个虚拟机操作环境

$ vagrant init box-cutter/ubuntu1504-desktop

该命令将在当前目录下创建一个Vagrantfile的配置文件,该文件用以对虚拟机环境进行配置。可以在其中直接加载配置脚本,完成例如预安装软件以及各种设置功能。

4、配置虚拟机操作环境

一个示例配置如下:

config.vm.define "base" do |base|
config.vm.provision "shell", path: "provision.sh"
base.vm.box = "base"
config.vm.provider "virtualbox" do |v|
v.name = "base-ubuntu1504-desktop"
end
end
  • 定义虚拟机名称

    config.vm.provider "virtualbox" do |v|
    v.name = "dev-ubuntu1504-desktop"
    end
  • 定义启动执行脚本

注意 provision.sh 不是绝对路径,是相对于 Vagrantfile 所在的目录

config.vm.provision "shell", path: "provision.sh"

例如,以下脚本安装了apache,修改了apache的默认目录:

#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
rm -rf /var/www
ln -fs /vagrant /var/www
fi

5、启动虚拟机

$ vagrant up

新建的虚拟机存放于Virtualbox的虚拟机目录,系统启动之后,可以进入图形界面,也可以同通过SSH登陆

  • 默认共享目录:.<-->/vargant
  • 查看SSH登陆信息:$ vagrant ssh-config
  • 默认SSH登陆方法:vagrant:vagrant@127.0.0.1:2222

三、定制系统

进入系统之后可以根据需要定制系统,包括更新系统、设定时区、安装输入法和软件等等

四、打包分发

打包系统,建立新的模板:$ vagrant package,即可在当前目录生成一个package.box的box,你可以把它保存到其他位置作为备份,或者分发给其他人作为模板。

模版使用步骤:

  1. 添加该模板:$ vagrant box add dev ./package.box
  2. 查看:$ vagrant box list
  3. 创建自己的目录并启动虚拟机:

$ mkdir dev
$ cd dev
$ vagrant init dev
$ vagrant up

五、常用命令

$ vagrant init  # 初始化
$ vagrant up # 启动虚拟机
$ vagrant halt # 关闭虚拟机
$ vagrant reload # 重启虚拟机
$ vagrant ssh # SSH 至虚拟机
$ vagrant status # 查看虚拟机运行状态
$ vagrant destroy # 销毁当前虚拟机

可以通过$ vagrant help查看

六、高级应用

1、多个虚拟机配置

vagrant支持一个Vagrantfile中定义多个虚拟机,通常用于创建一个集群,示例配置如下:

Vagrant.configure("2") do |config|
# 这个配置项会被后面两个虚拟机继承
# 注意 provision.sh 不是绝对路径,是相对于 Vagrantfile 所在的目录
config.vm.provision "shell", path: "provision.sh" config.vm.define "web" do |web|
web.vm.box = "apache"
web.vm.network "private_network", ip: "192.168.50.3"
end config.vm.define "db" do |db|
db.vm.box = "mysql"
db.vm.network "private_network", ip: "192.168.50.4"
end
end

七、我的工作流

  1. 创建一个工作目录,用于开发

  2. 选定一个基础开发环境,比如ubuntu-15.04-Desktop,在 https://atlas.hashicorp.com/boxes/search 上查找并导入模板,比如box-cutter/ubuntu1504-desktop

  3. 初始化一个虚拟机

  4. 设定一个简单配置,一般只需定义虚拟机名称

    config.vm.define "base" do |base|
    base.vm.box = "base"
    config.vm.provider "virtualbox" do |v|
    v.name = "base-ubuntu1504-desktop"
    end
    end
  5. 启动虚拟机,进行定制 通常只进行必须的本地化定制和软件安装。

  6. 制作模板,该模板用于定制特定开发环境的基础模板

  7. 根据开发需要,开发privision脚本,比如上文中的apache环境的定制,通过privision脚本定义不同的开发环境

  8. 基于模板和privision脚本,定义一个虚拟开发环境

  9. 启动开发环境,进行开发,开发的代码存储与共享目录下

八、附录

1、更改VirtualBox虚拟机映像文件的位置

打开 VirtualBox 程序,点击管理/全局设定菜单项(Ctrl+G), 将常规栏里的默认虚拟电脑位置(M)改为其他磁盘下的路径,将原路径 C:\Users\user_name\.VirtualBox\VirtualBox VMs下的文件移动到新路径下。 重新启动VirtualBox程序,在虚拟机列表里,以前建立的虚拟机虽然都还在,但已经不可用了,将他们全部删除。双击打开新路径各个文件夹里的vbox文件,将建立的虚拟机重新导入。VirtualBox虚拟机映像文件是vagrant最多的一块, 上述方法应该能显著减少vagrant对系统盘的空间占用。只是如果添加的vagrant box数量比较多,其占用的空间也是很可观的,可以用下面的方法将其移出系统盘。

2、更改vagrant配置文件的位置

C:\Users\user_name\.vagrant.d移动到新的位置,新建环境变量VAGRANT_HOME,并指向新路径

利用Vagrant搭建多平台环境的更多相关文章

  1. linux系统中利用vagrant创建虚拟开发环境

    Vagrant简介 作为程序员,可能需要同时开发多个项目,使用多种编程语言,需要使用各种操作系统,如果将很多东西放在同一个电脑上,肯定会被各种配置环境搞晕.一个比较好的办法就是每个项目都有一个干净的开 ...

  2. 利用Docker搭建本地https环境的完整步骤

    利用Docker搭建本地https环境的完整步骤 这篇文章主要给大家介绍了关于如何利用Docker搭建本地https环境的完整步骤,文中通过示例代码将实现的步骤介绍的非常详细,对大家的学习或者工作具有 ...

  3. vagrant系列教程(三):vagrant搭建的php7环境(转)

    原文:http://blog.csdn.net/hel12he/article/details/51107236 前面已经把vagrant的基础知识已经基本过了一遍 了,相信只要按着教程来,你已经搭建 ...

  4. Vagrant搭建Ubuntu-JavaEE开发环境——Tomcat+JDK+MySQL+dubbo+测试

    Vagrant搭建(Tomcat8+JDK7+MySQL5+dubbo) JDK 1.下载jdk 2.解压JDK tar -xzvf jdk-7u79-linux-x64.tar.gz 3.设置环境变 ...

  5. 利用gulp搭建less编译环境

       什么是less? 一种 动态 样式 语言. LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承, 运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, ...

  6. [大数据学习研究]1.在Mac上利用VirtualBox搭建本地虚拟机环境

    1. 大数据和Hadoop 研究学习大数据,自然要从Hadoop开始. Hadoop不是一个简单的软件,而是有一些列软件形成的生态,其核心思想来自Google当初发布的三篇论文,后来做了开源的实现, ...

  7. vagrant系列三:vagrant搭建的php7环境

    原文:https://blog.csdn.net/hel12he/article/details/51107236 前面已经把vagrant的基础知识已经基本过了一遍 了,相信只要按着教程来,你已经搭 ...

  8. Win10利用CodeBlocks搭建Objective-C开发环境(一)

    为了学习ios开发,而手头没有苹果机,若在windows平台下学习objective-c编程.则需要安装OC开发环境, 经过在网上查阅各种相关资料,历经多次失败,终于安装并测试成功,特将安装过程和经验 ...

  9. Centos7下搭建LAMP平台环境 (转载)

     1.启用Apache(httpd) Centos7默认已经安装httpd服务,只是没有启动.如果你需要全新安装,可以yum install -y httpd 启动服务:systemctl start ...

随机推荐

  1. java中的@Override是否需要

    java中的重载注解 @Override 是否需要?今天被人问到这个问题,回答的不太好,下来看了一下源码 /** * Annotation type used to mark methods that ...

  2. Win7 服务优化个人单机版

    我的PC设备比较旧了,为了系统能流畅点,不必要的服务就不开启了.然而,服务那么多,每次重装,都要从头了解一下一边,浪费时间. 个人在网络上收集信息并结合自己的摸索,整理如下,以备查找. 服务名称  显 ...

  3. 北大ACM(POJ1014-Dividing)

    Question:http://poj.org/problem?id=1014 问题点:抽屉原理.dfs.多重背包. Memory: 248K Time: 16MS Language: C++ Res ...

  4. 在ASP.NET中发送电子邮件的实例教程

    首先.导入命名空间: 代码如下 复制代码 using System.Net.Mail; 定义发送电子邮件的方法[网上很多不同的,可以对比着看一下,WinForm的也适用]: 代码如下 复制代码 /// ...

  5. Sql中判断"库、表、列,视图,存储过程"是否存在

    --判断数据库是否存在 IF EXISTS (SELECT * FROM MASTER.sys.sysdatabases WHERE NAME = '库名') PRINT 'exists ' else ...

  6. Cocos2d-JS地图性能问题

    如图所示游戏场景,它是我们以往介绍的实例,在场景中有三个方块精灵(BoxA.BoxB和BoxC)和背景精灵,这个背景叫做“地图”有点牵强,地图采用了有规律的纹理. 游戏场景 那么我们如何设计这个游戏地 ...

  7. Swift数据类型及数据类型转换

    整型  Swift 提供 8.16.32.64 位形式的有符号及无符号整数.这些整数类型遵循 C 语言的命名规 约,如 8 位无符号整数的类型为 UInt8,32 位 有符号整数的类型为 Int32 ...

  8. 20141103--SQL主键,外键

    设置主键: 右键表→设计,在需要的列上右键→设置主键 或者在创建表的时候,在想要作为索引的列后面加上 primary key create table biao3 ( [No.] int primar ...

  9. 4月12日学习笔记——jQuery操作属性和样式

    区分 DOM 属性和元素属性 <img src="images/image.1.jpg" id="hibiscus" alt="Hibiscus ...

  10. 《HTML5与CSS3基础教程》学习笔记 ——Three Day

    第十一章 1.  box-sizing:border-box(让宽度和高度包含内边距和边框) 2.  clear让后面的元素显示在浮动元素的后面 3.  z-index只对只对绝对.固定.相对定位的元 ...