利用Vagrant搭建多平台环境
title: 利用Vagrant搭建多平台环境
[TOC]
vagrant 是一个创建和分发虚拟化开发环境的工具,使用ruby编写,本身并不包含虚拟机管理软件,因此我们需要配合Vagrant安装一个虚拟机软件。Vagrant支持VMware, Virtual Box, Hyper-V 等多种虚拟机软件,我选择的是Virtual Box,免费,跨平台。
为什么有了虚拟机软件还需要使用Vagrant?
因为简单的虚拟机并不能满足我们的需要,我们希望一个新的环境,开机就帮我们解决了一切,包括特定版本的操作系统、定制软件环境安装、系统设置(时区、输入法等)等等。使用Vagrant可以方便的帮助我们搭建系统,以及之后自动的管理端口映射/软件包安装等等问题。同时,更重要的,Vagrant还可以方便的设定同步文件夹,让我们在宿主机内对程序的修改,可以方便的同步到客户机,在调试程序时,这是一个非常优秀的特质。除此之外,还有一些其他的特性,比如自动化的应用部署,需要我们自行去挖掘。
安装
安装virtualbox
略
安装vagrant
从官方网站下载安装即可。
初始化
创建工作目录
该工作目录用于存储虚拟机配置以及共享目录本地目录
$ mkdir vagrant $ cd vagrant
查找基础模板
vagrant用户在网上共享了基于各种操作系统的精简系统的模版(base box),从以下两个网站中可以查找。
初始化一个虚拟机
例如,我们选定了 https://atlas.hashicorp.com/boxes/search 上的box-cutter/Ubuntu1504-desktop,box文件将存储于%userprofile%/.vagrant.d/
,新的虚拟机存放于Virtualbox的虚拟机目录。
$ vagrant init box-cutter/ubuntu1504-desktop
该命令将在当前目录下创建一个Vagrantfile的配置文件,该文件用以对虚拟机进行配置。可以在其中直接加载配置脚本,完成例如预安装软件以及各种设置功能。
定义虚拟机名称
config.vm.provider "virtualbox" do |v| v.name = "dev-ubuntu1504-desktop" end
定义启动执行脚本
注意 provision.sh 不是绝对路径,则相对于 Vagrantfile 所在的目录
config.vm.provision "shell", path: "provision.sh"
可在其中实现的功能包括:
- 系统更新:
sudo apt-get update
- 安装必要的软件:
sudo apt-get install git 。。。
启动虚拟机
$ vagrant up
系统启动之后,可以进入图形界面,可以同通过SSH登陆
- 默认共享目录:.<-->/vargant
- 查看SSH登陆信息:
$ vagrant ssh-config
- 默认SSH:vagrant: [email protected]:2222
定制系统
- 根据需要定制系统
更新系统、设定时区、安装输入法和软件等等
其他
打包系统,建立新的模板:$ vagrant package
,即可在当前目录生成一个package.box的box,你可以把它保存到其他位置作为备份,或者分发给其他人作为模板。
模版使用步骤:
- 添加该模板:
$ vagrant box add dev ./package.box
- 查看:
$ vagrant box list
- 创建自己的目录并启动虚拟机:
$ 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
查看
高级应用
- 多个虚拟机
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
附录
- 更改VirtualBox虚拟机映像文件的位置
打开 VirtualBox 程序,点击管理/全局设定菜单项(Ctrl+G), 将常规栏里的默认虚拟电脑位置(M)改为其他磁盘下的路径
将原路径 C:\Users\user_name\.VirtualBox\VirtualBox VMs
下的文件移动到新路径下。
重新启动VirtualBox程序,在虚拟机列表里,以前建立的虚拟机虽然都还在,但已经不可用了,将他们全部删除。
双击打开新路径各个文件夹里的vbox文件,将建立的虚拟机重新导入。
VirtualBox虚拟机映像文件是vagrant最多的一块, 上述方法应该能显著减少vagrant对系统盘的空间占用。只是如果添加的vagrant box数量比较多,其占用的空间也是很可观的,可以用下面的方法将其移出系统盘。
- 更改vagrant配置文件的位置
将C:\Users\user_name\.vagrant.d
移动到新的位置
新建环境变量VAGRANT_HOME,并指向新路径