1. 为什么要选择vagrant开构建虚拟机
- 方便快捷,只需要通过vagrant配置文件进行配置配合vagrant常用命令就可以轻松的创建一个虚拟机开发环境
- 同时创建多个虚拟机,在配置文件中自定义多个ip可以创建多个虚拟机,自主分配内存和cpu使用
- window和虚拟机共享目录,方便同步
2. 版本选择
vagrant:2.26
官网下载:www.vagrantup.com/
网盘链接:链接:pan.baidu.com/s/15BVvou1o… 提取码:7mpl
virtual Box:6.18
下载链接:官网
网盘链接:pan.baidu.com/s/1Ux36RDDQ… 提取码:hc65
3. vagrant 常用命令
vagrant init //初始化 会生成vagrant的配置文件Vagrantfile
vagrant up //启动虚拟机
vagrant up --provider=virtualbox //使用virtual box作为虚拟机,加上提供者参数
vagrant halt //关闭虚拟机
vagrant reload //重启虚拟机
vagrant ssh //ssh登录虚拟机
vagrant suspend //挂起虚拟机
vagrant resume //唤醒虚拟机
vagrant status //查看虚拟机状态
vagrant destory //销毁虚拟机
vagrant plugin // 安装卸载插件
vagrant box list // 查看本地box列表
vagrant box add [box名] 文件路径|url|中央仓库镜像 //添加box到列表 例如vagrant box add elubuntu16 elmsln/ubuntu16
vagrant box remove box名 //从box列表移除
4. vagrant 配置文件相关配置说明
-
box设置
config.vm.box = "bento/ubuntu-16.04"
-
host设置
config.vm.hostname = "node1"
-
虚拟机网络设置
config.vm.network "private_network", ip: "192.168.10.11" //Host-only模式 config.vm.network "public_network", ip: "10.1.2.61" //Bridge模式 //vagrant 网络连接方式有三种: //NAT : 缺省创建,用于让vm可以通过host转发访问局域网甚至互联网。 //host-only : 只有主机可以访问vm,其他机器无法访问它。 //bridge : 此模式下vm就像局域网中的一台独立的机器,可以被其他机器访问。 //host-only 模式的IP可以不指定,而是采用dhcp自动生成的方式,如 : config.vm.network "private_network", type: "dhcp”
-
同步目录设置
config.vm.synced_folder "D:/xxx/code", "/home/www/" //前者是宿主机目录,后者是虚拟机共享挂载目录
-
端口转发设置
config.vm.network :forwarded_port, guest: 80, host: 8080
上面的配置把宿主机上的8080端口映射到客户虚拟机的80端口,例如你在虚拟机上使用nginx跑了一个Go应用,那么你在host上的浏览器中打开[http://localhost:8080时, Vagrant就会把这个请求转发到虚拟机里跑在80端口的nginx服务上。不建议使用该方法,因为涉及端口占用问题,常常导致应用之间不能正常通信,建议使用Host-only和Bridge方式进行设置。]
-
定义vm的configure配置节点(一个节点就是一个虚拟机)
config.vm.define : “mysql” do |mysql_config| db.vm.box = "mysql" end
表示在config配置中,定义一个名为mysql的vm配置,该节点下的配置信息命名为mysql_config; 如果该Vagrantfile配置文件只定义了一个vm,这个配置节点层次可忽略。
当定义了多主机之后,在使用vagrant命令的时候,就需要加上主机名,例如vagrant ssh web;也有一些命令,如果你不指定特定的主机,那么将会对所有的主机起作用,比如vagrant up;你也可以使用表达式指定特定的主机名,例如vagrant up /follower[0-9]/。
-
通用数据设置一些基础数据,供配置信息中调用
app_servers = { :service1 => '192.168.33.20', :service2 => '192.168.33.21', }
这里是定义一个hashmap,以key-value方式来存储vm主机名和ip地址。
-
vm提供者配置
config.vm.provider :virtualbox do |vb| # ... end
配置好了Vagrantfile文件之后直接vagrant up就可以启动虚拟机了,可以在虚拟机上进行开发环境的配置。
5. 问题汇总
1. vagrant up的时候报错
Bringing machine 'default' up with 'hyperv' provider...
==> default: Verifying Hyper-V is enabled...
The Hyper-V cmdlets for PowerShell are not available! Vagrant
requires these to control Hyper-V. Please enable them in the
"Windows Features" control panel and try again.
解决:
vagrant up --provider=virtualbox
2. vagrant up 之后提示virtual box的版本跟下载版本不符(下载最新版本,但是命令提示的版本里面没有支持最新虚拟机版本)
解决:
找到plugin.rb文件。E:\HashiCorp\Vagrant\embedded\gems\2.2.6\gems\vagrant-2.2.6\plugins\providers\virtualbox\plugin.rb
修改这个文件,plugin.rb,增加一行代码
找到meta.rb文件。E:\HashiCorp\Vagrant\embedded\gems\2.2.6\gems\vagrant-2.2.6\plugins\providers\virtualbox\driver\meta.rb
同样增加一行版本信息代码
创建version_6_1.rb文件。E:\HashiCorp\Vagrant\embedded\gems\2.2.6\gems\vagrant-2.2.6\plugins\providers\virtualbox\driver\version_6_1.rb
增加一个版本文件,并将上一个文件内容复制过来,修改有关版本信息的地方即可
3. 开启虚拟机的时候碰到hype-v的错误
解决:打开window10的程序和功能(应用->应用和功能->相关设置中的程序和功能->启动或关闭window的相关功能)勾选hyper-V