Vagrant + VirtualBox(一) :安装虚拟机CentOS

Vagrant 简介

Vagrant 是为了方便的实现虚拟化环境而设计的,使用 Ruby 开发,基于 VirtualBox 等虚拟机管理软件的接口,提供了一个可配置、轻量级的便携式虚拟开发环境。使用 Vagrant 可以很方便的就建立起来一个虚拟环境,而且可以模拟多台虚拟机,这样我们平时还可以在开发机模拟分布式系统。

VirtualBox 简介

VirtualBox – Oracle 公司的虚拟机软件, 能运行在当前大部分流行的系统上。

安装

下载安装 VirtualBox :https://www.virtualbox.org/
下载安装 Vagrant :http://www.vagrantup.com/
在线查找需要的box,这里下载CentOS/7
https://app.vagrantup.com/boxes/search

拼下载 URL:

'https://app.vagrantup.com/centos/boxes/7/versions/1812.01' + '/providers/' + '供应商名字/' + '.box'

公式:下载链接 = 产品版本链接 + 供应商英文意思 + 要下载的供应商名称(如virtualbox)+’.box’

如上选择的是版本是 v1812.01 ,生成的下载链接为 :

https://app.vagrantup.com/centos/boxes/7/versions/1812.01/providers/virtualbox.box

下载时最好都下载最新版本,确保版本要兼容。
安装顺序:先安装 VirtualBox,后安装 Vagrant。都是默认安装即可,也可以选择安装路径。浏览器下载太慢,可以复制下载地址到迅雷下载。
Vagrant + VirtualBox(一) :安装虚拟机CentOS

第一步,新建目录
比如在 D 盘新建目录

mkdir -p vagrant/centos01
cd vagrant/centos01

第二步,添加box
在 D:/vagrant/centos01 目录下执行添加 box 命令。如果添加的镜像在本地不存在,就会转为自动下载,下载源是外网,会非常慢,所以前面我们都先自己下载好镜像在添加。这里镜像放在 E:/BaiduYunDownload 目录下

vagrant box add centos-7.0 E:/BaiduYunDownload/centos-7.0-x86_64.box

centos-7.0 为 box 指定名称,使用 base 时,之后可以直接使用 vagrant init 进行初始化,如果自行指定名称,则初始化的时候需要指定 box 的名称。

执行添加命令之后可以以下命令查看添加的box

vagrant box list

第三步,初始化配置文件
设置好 box 之后,在当前工作目录运行初始化生成配置文件 Vagrantfile,需要指定 box 名字,否则配置文件生成默认的配置box,config.vm.box = “base”,也可以自己修改

vagrant init centos-7.0

遇到问题:
The user that is running Vagrant doesn’t have the proper permissions
to write a Vagrantfile to the specified location. Please ensure that
you call vagrant init in a location where the proper permissions
are in place to create a Vagrantfile.

解决方法:
这是权限不足,用管理员运行cmd在执行 vagrant init [box-name] 即可

第四步,启动box

vagrant up

遇到问题:
Stderr: VBoxManage.exe: error: Raw-mode is unavailable courtesy of Hyper-V. (VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole
由于启用了Hyper-V

解决方法:
在控制中心 -》应用 -》程序和功能 -》开启关闭windows程序中,将Hyper-V关闭,重启电脑。

第五步,登录虚拟机

vagrant ssh

第六步,配置共享文件夹

默认是将 vagrant 配置文件所在目录挂载到虚拟机 /vagrant 目录下
修改成其他目录,首先要在虚拟机创建好映射的目录

[vagrant@10 /]$ sudo mkdir /code

配置 Vagrantfile,第一个参数是本机的目录,第二个参数是虚拟机挂载的目录

config.vm.synced_folder "D:/WWW", "/code"

保存好配置之后需要执行命令配置才生效

vagrant reload
$ vagrant ssh
Last login: Thu Jul 16 08:48:31 2015 from 10.0.2.2
Welcome to your Vagrant-built virtual machine.
[vagrant@10 ~]$ ll
insgesamt 24
-rwxr-xr-x 1 vagrant vagrant 450 16. Jul 2015  base.sh
-rwxr-xr-x 1 vagrant vagrant 118 16. Jul 2015  cleanup.sh
-rwxr-xr-x 1 vagrant vagrant 360 16. Jul 2015  puppet.sh
-rwxr-xr-x 1 vagrant vagrant 674 16. Jul 2015  vagrant.sh
-rwxr-xr-x 1 vagrant vagrant 260 16. Jul 2015  virtualbox.sh
-rwxr-xr-x 1 vagrant vagrant 105 16. Jul 2015  zerodisk.sh

至此虚拟机 CentOS 就搭配好了

配置文件 Vagrantfile

指定 box

Vagrant.configure("2") do |config|
config.vm.box = "centos-7.0"	#指定box名字

这两行就是我们在 vagrant init 中后面所指定的参数。由此可以看出,vagrant init 只是帮我们生成了配置文件而已,换句话说,如果我们写好了Vagrantfile,就不需要 vagrant init,只需将准备好的配置文件放入到所需目录中,然后直接执行 vagrant up 即可。

网络配置
Vagrant有两种方式来进行网络连接,一种是host-only(主机模式),意思是主机和虚拟机之间的网络互访,而不是虚拟机访问internet的技术,也就是只有你一個人自High,其他人访问不到你的虚拟机。另一种是Bridge(桥接模式),该模式下的VM就像是局域网中的一*立的主机,也就是说需要VM到你的路由器要IP,这样的话局域网里面其他机器就可以访问它了,一般我们设置虚拟机都是自high为主,所以我们的设置一般如下:

config.vm.network :private_network, ip: "11.11.11.11"	#设置ip

这里我们虚拟机设置为host-only,并且指定了一个IP,IP的话建议最好不要用192.168…这个网段,因为很有可能和你局域网里面的其它机器IP冲突,所以最好使用类似11.11…这样的IP地址。

使用host-only模式时可能报错:
Stderr: 0%…
Progress state: E_INVALIDARG
VBoxManage.exe: error: Failed to create the host-only adapter
VBoxManage.exe: error: Assertion failed: [!aInterfaceName.isEmpty()] at ‘F:\tinderbox\win-6.0\src\VBox\Main\src-server\HostNetworkInterfaceImpl.cpp’ (76) in long __cdecl HostNetworkInterface::init(class com::Bstr,class com::Bstr,class com::Guid,enum __MIDL___MIDL_itf_VirtualBox_0000_0000_0044).
VBoxManage.exe: error: Please contact the product vendor!

解决方法:

  1. 在virtualbox 管理 - > 全局设定 -> 网络 - > tab 仅主机网络 - > 添加
    正常情况下是可以添加成功的,但是有可能报
    Could not find Host Interface Networking driver!Please reinstall(找不到主机接口网络驱动程序!请重新安装)

  2. 如果第一步报错,这是因为之前卸载虚拟网卡的时候把驱动也给删除了。
    可以在安装virtualbox目录…/Oracle VM VirtualBox中的 drivers\ network\ netadp6目录下有三个文件
    VBoxNetAdp6.cat
    VBoxNetAdp6.inf
    VBoxNetAdp6.sys
    这就是virtualbox虚拟网卡的驱动,右击VBoxNetAdp6.inf,右键点安装即可。
    然后再做第二步。应该可以完成了。

端口转发

config.vm.network :forwarded_port, guest: 80, host: 8080	#设置端口

这一行的意思是把对host机器上8080端口的访问请求forward到虚拟机的80端口的服务上,例如你在你的虚拟机上使用nginx跑了一个Go应用,那么你在host机器上的浏览器中打开http://localhost:8080时,Vagrant就会把这个请求转发到VM里面跑在80端口的nginx服务上,因此我们可以通过这个设置来帮助我们去设定host和VM之间,或是VM和VM之间的信息交互。

hostname 配置

config.vm.hostname = "go-app"	#主机名

设置hostname非常重要,因为当我们有很多台虚拟服务器的时候,都是依靠hostname來做识别的,例如Puppet或是Chef,都是通过hostname來做识别的,既然设置那么简单,所以我们就別偷懒,设置一个。

相关命令

vagrant box 基本命令

  1. 列出本地环境中所有的box
vagrant box list
  1. 添加box到本地vagrant环境,自动生成vagrantfile
vagrant box add box-name (box-url)
  1. 更新本地环境中指定的box
vagrant box update box-name
  1. 删除本地环境中指定的box
vagrant box remove box-name
  1. 重新打包本地环境中指定的box
vagrant box repackage box-name

vagrant 基本命令

  1. 在空文件夹初始化虚拟机
vagrant init box-name
  1. 在初始化完的文件夹内启动虚拟机,没有密码
vagrant up
  1. ssh登录启动的虚拟机,没有密码
vagrant ssh
  1. 挂起启动的虚拟机
vagrant suspend
  1. 重启虚拟机,会加载vagrantfile文件,修改配置文件要执行
vagrant reload
  1. 关闭虚拟机
vagrant halt
  1. 查找虚拟机的运行状态
vagrant status
  1. 销毁当前虚拟机
vagrant destroy

参考:
https://www.cnblogs.com/wangkongming/p/4301021.html
https://www.cnblogs.com/hafiz/p/9175484.html

上一篇:vagrant入门


下一篇:ruby-on-rails – Vagrant VM不保存任何更改;每次“暂停/暂停”时都会创建新的VM(Windows Vagrant,VirtualBox,RailsDevBox)