vagrant搭建开发环境

Vagrant 是一个基于 Ruby 的工具,用于创建和部署虚拟化开发环境。它使用 Oracle 的开源 VirtualBox 虚拟化系统,使用 Chef 创建自动化虚拟环境。它底层支持 VirtualBox、VMware 甚至 AWS 作为虚拟机系统。

17_11_21_01.png

安装环境和工具:windows7 x64、迅雷、cmder

安装 VirtualBox

直接去官网下载最新的 virtualbox,安装一路点确定或yes就行。

安装 Vagrant

建议直接去官网下载最新的 vagrant,安装一路点确定或yes就行,安装后为了写入环境变量需要重启电脑。

配置 Vagrant

这里要注意了,稍不注意就可能报错或者没反应。

box 下载

在 vagrant 的世界里,box 相当于操作系统,比如 centos、ubuntu、debian 等,去这里下载,或者用别人打包好的 box 也行。可以用迅雷下载,有人说用迅雷会掉包什么的,反正我这里没什么问题,速度挺快的,放心下吧。

box 安装

新建一个文件夹作为工作目录,我在H盘新建了一个/centos7

1
cd H:\centos7

在当前工作目录下输入下列命令,vagrant init之后会在工作目录下生成一个Vagrantfile文件,这是启动虚机的配置文件,不作更改也是可以启动系统的。

1
2
3
vagrant box add {title} {url}
vagrant init {title}
vagrant up

vagrant box add是添加 box 到 vagrant 中的命令,box存放目录一般在C:\Users\chjiyun\.vagrant.d\boxes,title 自己命名就行,我设置的是 centos7,url是本地 box 的路径。

我是这样安装的:

1
2
3
vagrant box add centos7 C:\Users\chjiyun\Downloads\centos-7.0-x86_64.box
vagrant init centos7
vagrant up --provider virtualbox

注意:输入vagrant up要是没反应,就带--provider virtualbox参数,我就是在那里卡了好久,光标一直闪就是没反应。启动系统成功以后可以不用带哪个参数了。

启动成功后是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
H:\centos7
$ vagrant reload
==> default: Attempting graceful shutdown of VM...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
==> default: You are trying to forward to privileged ports (ports <= 1024). Most
==> default: operating systems restrict this to only privileged process (typically
==> default: processes running as an administrative user). This is a warning in case
==> default: the port forwarding doesn't work. If any problems occur, please try a
==> default: port higher than 1024.
==> default: Forwarding ports...
default: 80 (guest) => 80 (host) (adapter 1)
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
default: The guest additions on this VM do not match the installed version of
default: VirtualBox! In most cases this is fine, but in rare cases it can
default: prevent things such as shared folders from working properly. If you see
default: shared folder errors, please make sure the guest additions within the
default: virtual machine match the version of VirtualBox you have installed on
default: your host and reload your VM.
default:
default: Guest Additions Version: 4.3.28
default: VirtualBox Version: 5.2
==> default: Configuring and enabling network interfaces...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
==> default: Mounting shared folders...
default: /vagrant => H:/centos7
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

登录虚机

经过上面的安装,没有报错后,虚拟机就安装成功了,现在开始登录虚拟机。可以使用 xshell,我这里用的 cmder,内置 shell 命令。

直接输入vagrant ssh进行登录,使用 xshell 的话,得输入ip和端口号,观察上面启动系统后的提示,看虚机22端口映射的是宿主机的那个端口。很明显我的是2222端口,也就是127.0.0.1:2222,用户名与密码都是 vagrant。

vagrantfile

我的配置是这样的:

1
2
3
4
5
6
7
8
9
10
Vagrant.configure("2") do |config|
config.vm.box = "centos7"
config.vm.network "forwarded_port", guest: 80, host: 80
config.vm.network "private_network", ip: "192.168.33.10"
# config.vm.network "public_network"
config.vm.synced_folder "./", "/vagrant"
config.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end
end

网络连接有三种方式:host-only(私有网络)、Bridge(公有网络)、端口映射。

  • 端口映射:就是 host 机器上80端口的访问请求forward到虚拟机的80端口的服务上。
  • 私有网络:这种方式是只允许主机访问虚拟机。如果多个虚拟机设定在同一个网段,那么几个虚拟机之间也可以互相访问。
  • 公有网络:这种网络配置方式,方便团队开发,别人也可以访问你的虚拟机。当然,你和你的虚拟机必须在同一个网段中。

共享目录我设置的是工作目录与 centos 下的/vagrant同步。

更改配置后记得exit退出登录,再vagrant relaod使配置生效。关闭虚机时记得vagrant status查看是否已经 poweroff,避免给以后使用带来一些问题。

还有很多配置,这里先不说了。待续…

vagrant命令

命令作用
vagrant box add添加 box
vagrant box list显示当前已经添加的box列表
vagrant init初始化 box 的操作,会生成 vagrant 的配置文件 Vagrantfile
vagrant up启动本地环境
vagrant status获取当前虚拟机的状态
vagrant ssh登录本地环境所在虚拟机
vagrant halt关闭本地环境
vagrant suspend暂停本地环境
vagrant resume恢复本地环境
vagrant reload修改了 Vagrantfile 后,使之生效(相当于先 halt,再 up)
vagrant destroy彻底移除本地环境
vagrant box remove删除相应的 box
vagrant package打包命令,可以把当前的运行的虚拟机环境进行打包
vagrant plugin用于安装卸载插件
vagrant global-status显示当前用户 Vagrant 的所有环境状态

关于网络的详细配置可参考http://blog.csdn.net/ciweieric/article/details/52026826