window10使用vagrant、virtualBox构建虚拟机

120 阅读4分钟

1. 为什么要选择vagrant开构建虚拟机

  1. 方便快捷,只需要通过vagrant配置文件进行配置配合vagrant常用命令就可以轻松的创建一个虚拟机开发环境
  2. 同时创建多个虚拟机,在配置文件中自定义多个ip可以创建多个虚拟机,自主分配内存和cpu使用
  3. 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 配置文件相关配置说明

  1. box设置

    config.vm.box = "bento/ubuntu-16.04"
    
  2. host设置

    config.vm.hostname = "node1"
    
  3. 虚拟机网络设置

    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”
    
  4. 同步目录设置

    config.vm.synced_folder "D:/xxx/code", "/home/www/"     
    //前者是宿主机目录,后者是虚拟机共享挂载目录
    
  5. 端口转发设置

    config.vm.network :forwarded_port, guest: 80, host: 8080
    

上面的配置把宿主机上的8080端口映射到客户虚拟机的80端口,例如你在虚拟机上使用nginx跑了一个Go应用,那么你在host上的浏览器中打开[http://localhost:8080时, Vagrant就会把这个请求转发到虚拟机里跑在80端口的nginx服务上。不建议使用该方法,因为涉及端口占用问题,常常导致应用之间不能正常通信,建议使用Host-only和Bridge方式进行设置。]

  1. 定义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]/。

  1. 通用数据设置一些基础数据,供配置信息中调用

    app_servers = {
    
        :service1 => '192.168.33.20',
    
        :service2 => '192.168.33.21',
    
    }
    

这里是定义一个hashmap,以key-value方式来存储vm主机名和ip地址。

  1. 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,增加一行代码

version.png

找到meta.rb文件。E:\HashiCorp\Vagrant\embedded\gems\2.2.6\gems\vagrant-2.2.6\plugins\providers\virtualbox\driver\meta.rb

同样增加一行版本信息代码

meta.png

创建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

增加一个版本文件,并将上一个文件内容复制过来,修改有关版本信息的地方即可

ver.png

3. 开启虚拟机的时候碰到hype-v的错误

Image.png

解决:打开window10的程序和功能(应用->应用和功能->相关设置中的程序和功能->启动或关闭window的相关功能)勾选hyper-V

参考博客:blog.csdn.net/u011781521/…