一、Vagrant是什么?

vagrant是一个操作虚拟机的工具.是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。 通过命令和配置文件来管理虚拟机,很快就能完成一套开发环境的部署,并可以打包传播,统一了开发环境,也解决了重复配置环境的麻烦.

二、Vargant的好处

1. Vagrant会创建共享文件夹,用来在主机和虚拟机之间进行资源共享;

2. Vagrant通过添加Box镜像进行快速部署,部署完毕后可以通过package进行打包分发,避免二次重建环境;

3. Vagrant可以使用puppet、chref等管理工具进行自动化配置部署;

4. Vagrant支持单机模拟多台机器,且支持一个配置文件Vagrantfile就可以跑分布式系统。

三、准备工作

win7下建议安装版本

1.vagrant_1.8.6.msi

2.VirtualBox-5.1.24-117012-Win.exe

win10下建议安装版本

1.vagrant_1.8.7.msi/vagrant_1.9.7_x86_64.msi

2.VirtualBox-5.1.24-117012-Win.exe

我这里是Win10系统,刚开始不清楚,装的是最新的VirtualBox-5.2.8-121009-Win.exe+Vagrant 2.1.1启动就报错,后来上网一搜说是版本不兼容造成的。我这里有两台电脑都是win10的有台电脑上死活装不上,有台电脑却能装上。。跟win10系统版本也有关系?我这系统版本是:

四、进行安装

1.安装VirtualBox

VirtualBox安装就不多说了,一直下一步下一步就行了。

2.安装Vagrant

Vargrant下载win版的,然后一直下一步下一步就行了。

3.下载package.Box

去vagrant官网下载一个package.Box 文件,Box文件就是一个系统的镜像文件 :http://www.vagrantbox.es/

4.把虚拟机加载到Box容器中

下载好之后,在该目录下执行命令加载镜像文件到Vagrant中去:

vagrant Box add centos7 xxxx.Box
centos7是给虚拟机起的名字,随意写。然后可以通过以下命令查看,当前vagrant下有那些可用
C:\Users\fendo>vagrant Box list
centos7 (virtualBox,0)

5.初始化虚拟机

在你想要创建虚拟机的目录下,执行以下命令进行初始化

vagrant init centos7

会生成一个Vagrantfile文件,该文件就是Vagrant的配置文件。

6.启动虚拟机

在该目录下输入:

vagrant up

启动报错:

E:\OS_WORK\Node1>vagrant up
Bringing machine 'default' up with 'virtualBox' provider...
==> default: Importing base Box 'centos7'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: Node1_default_1525964151077_64147
"rsync" Could not be found on your PATH. Make sure that rsync
is properly installed on your system and available on the PATH.

修改:

C:\Users\{your_username}\.vagrant.d\Boxes\centos7\0\virtualBox\Vagrantfile

原配置:

Vagrant.configure("2") do |config|
  config.vm.base_mac = "525400cae48b"
  config.vm.synced_folder ".","/vagrant",type: "rsync"
end

改为:

Vagrant.configure("2") do |config|
  config.vm.base_mac = "525400cae48b"
  config.vm.synced_folder ".",type: "virtualBox"
end

然后启动,报如下错误:

E:\OS_WORK\Node1>vagrant up
Bringing machine 'default' up with 'virtualBox' provider...
==> default: Clearing any prevIoUsly set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> 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:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base Box for this VM! Guest
    default: additions are required for forwarded ports,shared folders,host only
    default: networking,and more. If SSH fails on this machine,please install
    default: the guest additions and repackage the Box to continue.
    default:
    default: This is not an error message; everything may continue to work properly,default: in which case you may ignore this message.
==> default: Mounting shared folders...
    default: /vagrant => E:/OS_WORK/Node1
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vBoxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant Box. For context,the command attempted was:

mount -t vBoxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

mount: unkNown filesystem type 'vBoxsf'

中文意思就是:

vagrant 无法装载VirtualBox的共享文件夹,因为文件系统"vBoxsf"无法使用.
这个文件系统通过VirtualBox客户添加内核模块获得,请确认是否被正确安装.
这不是vagrant的问题,而是VirtualBox引起的问题.
请尝试执行,以下命令:
mount -t vBoxsf -o uid=1001,gid=1001 work_ /work
命令输出的错误信息为:
sbin/mount.vBoxsf:挂载失败:找不到这个文件或目录

网上说的是,是Vagrant没有安装VBoxGuestAdditions,下面来手工安装VitrualBox的这个增强功能:


●使用命令

E:\OS_WORK\Node1>vagrant halt
==> default: Attempting graceful shutdown of VM...

停止已在运行的虚拟机

●启动VirtualBox中的虚拟机

直接在VirtualBox中启动虚拟机,如下所示进行登录:


输入默认用户名 : vagrant,登录密码 : vagrant

●挂载并安装VBoxGuestAdditions

挂载办法如下所示:设备->安装增强功能


提示以下错误


手动安装下,在VirtualBox安装目录下找到VBoxGuestAdditions.iso


加载进来,之后重启下,使用以下命令安装VBoxGuestAdditions

sudo mount /dev/cdrom /media/cdrom
cd /media/cdrom/
sudo ./VBoxLinuxAddtions.run

发现还是不行,然后又执行以下命令更新了下系统

sudo yum update
sudo yum install gcc
sudo yum install kernel-devel

exit #退出虚拟机
vagrant halt # 关闭虚拟机

后面还是不行。然后使用vagrant命令进行安装

E:\OS_WORK\Node1>vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Installed the plugin 'vagrant-vbguest (0.15.1)'!

之后重启

E:\OS_WORK\Node1>vagrant reload --provision
==> 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: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> 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] No installation found.
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.shu.edu.cn
 * extras: mirrors.shu.edu.cn
 * updates: mirrors.shu.edu.cn
Package kernel-devel-3.10.0-862.2.3.el7.x86_64 already installed and latest version
Package gcc-4.8.5-28.el7.x86_64 already installed and latest version
Package binutils-2.27-27.base.el7.x86_64 already installed and latest version
Package 1:make-3.82-23.el7.x86_64 already installed and latest version
Package 4:perl-5.16.3-292.el7.x86_64 already installed and latest version
Package bzip2-1.0.6-13.el7.x86_64 already installed and latest version
nothing to do
copy iso file C:\Program Files\Oracle\VirtualBox/VBoxGuestAdditions.iso into the Box /tmp/VBoxGuestAdditions.iso
Mounting VirtualBox Guest Additions ISO to: /mnt
mount: /dev/loop0 is write-protected,mounting read-only
Installing VirtualBox Guest Additions 5.1.24 - guest version is unkNown
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.1.24 Guest Additions for Linux...........
VirtualBox Guest Additions installer
copying additional installer modules ...
Installing additional modules ...
vBoxadd.sh: Starting the VirtualBox Guest Additions.

Could not find the X.Org or XFree86 Window System,skipping.
Redirecting to /bin/systemctl start vBoxadd.service
Redirecting to /bin/systemctl start vBoxadd-service.service
Unmounting VirtualBox Guest Additions ISO from: /mnt

==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => E:/OS_WORK/Node1

然后启动:

E:\OS_WORK\Node1>vagrant up
Bringing machine 'default' up with 'virtualBox' provider...
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

五、Vagrant连接

1.虚拟机相关登录信息

E:\OS_WORK\Node1>vagrant ssh
`ssh` executable not found in any directories in the %PATH% variable. Is an
SSH client installed? Try installing Cygwin,MinGW or Git,all of which
contain an SSH client. Or use your favorite SSH client with the following
authentication information shown below:

Host: 127.0.0.1
Port: 2222
Username: vagrant
Private key: E:/OS_WORK/Node1/.vagrant/machines/default/virtualBox/private_key
这样我们就可以像连接到一台服务器一样进行操作了。

2.ssh登录

window机器不支持这样的命令,必须使用第三方客户端来进行连接,例如xmoba、putty、Xshell等.

ssh: 127.0.0.1  
端口: 2222  
用户名: vagrant  
密码: vagrant

这里使用Xshell来登录


找到刚刚上面生成的秘钥:

E:/OS_WORK/Node1/.vagrant/machines/default/virtualBox/private_key

然后点击确定,进行连接


注意事项:

注意关机之前都要关闭下虚拟机。如果不关闭的话 明天早上起来就发现启动不了

在.Vagrantfile文件中设置:
设置用户名以及密码:
config.ssh.username = "vagrant"
config.ssh.password = "vagrant"
设置虚拟网络

config.vm.network "private_network",ip: "192.168.33.10"

六、Vagrant常用命令

1. 添加Box

提前下载好的Box文件,~/Box/centos.Box,我们给这个Box命名为centos vagrant Box add centos ~/Box/centos.Box#Box文件也可以是远程地址 base 为默认名称#vagrant Box add base http://files.vagrantup.com/lucid64.Box
2. 初始化

打开目录#cd ~/vagrant/work#初始化vagrant init#如果你添加的Box名称不是base,那么需要在初始化的时候指定名称,例如vagrant init centos

3. 启动虚拟机
vagrant up
4. 打包分发

vagrant package
5. 帮助命令

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

Vagrant系列(一)----win10搭建Vagrant+VirtualBox环境的更多相关文章

  1. HTML5拖拽功能实现的拼图游戏

    本文通过实例代码给大家介绍了HTML5拖拽功能实现的拼图游戏,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧

  2. html5录音功能实战示例

    这篇文章主要介绍了html5录音功能实战示例的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. three.js模拟实现太阳系行星体系功能

    这篇文章主要介绍了three.js模拟实现太阳系行星体系功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  4. 基于 HTML5 WebGL 实现的医疗物流系统

    物联网( IoT ),简单的理解就是物体之间通过互联网进行链接。这篇文章给大家介绍基于 HTML5 WebGL 实现的医疗物流系统,感兴趣的朋友跟随小编一起看看吧

  5. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. HTML5跳转小程序wx-open-launch-weapp的示例代码

    这篇文章主要介绍了HTML5跳转小程序wx-open-launch-weapp的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  7. ios – 为什么,将nil作为参数从Objc C发送到swift类初始化器,用新对象替换nil参数

    除非属性本身被声明为nonnull:

  8. XCode 5远程调试OS X应用程序

    我正在使用XCode5.0.2在OSX10.9上开发一个应用程序并获得了一个我无法在这台开发机器上重现的错误报告.但是,我有一个10.7虚拟机出现崩溃,所以我想调试那里没有在这个VM中安装XCode.我搜索了有关远程调试的信息,但我没有得到有用的答案.我甚至担心它根本不受支持.但无论如何我还是要问一下.或者,除了执行完整的XCode安装等之外,还有哪些其他选项来调试这样的问题?

  9. ios – 在Swift中对MKCircle进行子类化

    我想通过添加另一个String属性来继承MKCircle,我们称之为“代码”.这个属性不是可选的和常量的,所以我必须从初始化器设置它,对吧?有没有办法定义一个单一的便利初始化器,在这种情况下需要3个参数?本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  10. ios – AVAudioPlayer不再使用Swift 2.0/Xcode 7 beta

    对于我的iPhone应用程序中的vartestAudio声明,我在这里收到错误“调用可以抛出,但错误不能从属性初始化程序中抛出”当我转到Xcode7测试版时,就发生了这种情况.如何在Swift2.0中使用此音频剪辑?

随机推荐

  1. static – 在页面之间共享数据的最佳实践

    我想知道在UWP的页面之间发送像’selectedItem’等变量的最佳做法是什么?创建一个每个页面都知道的静态全局变量类是一个好主意吗?

  2. .net – 为Windows窗体控件提供百分比宽度/高度

    WindowsForm开发的新手,但在Web开发方面经验丰富.有没有办法为Windows窗体控件指定百分比宽度/高度,以便在用户调整窗口大小时扩展/缩小?当窗口调整大小时,可以编写代码来改变控件的宽度/高度,但我希望有更好的方法,比如在HTML/CSS中.在那儿?

  3. 使用Windows Azure查询表存储数据

    我需要使用特定帐户吗?>将应用程序部署到Azure服务后,如何查询数据?GoogleAppEngine有一个数据查看器/查询工具,Azure有类似的东西吗?>您可以看到的sqlExpressintance仅在开发结构中,并且一旦您表示没有等效,所以请小心使用它.>您可以尝试使用Linqpad查询表格.看看JamieThomson的thispost.

  4. windows – SetupDiGetClassDevs是否与文档中的设备实例ID一起使用?

    有没有更好的方法可以使用DBT_DEVICEARRIVAL事件中的数据获取设备的更多信息?您似乎必须指定DIGCF_ALLCLASSES标志以查找与给定设备实例ID匹配的所有类,或者指定ClassGuid并使用DIGCF_DEFAULT标志.这对我有用:带输出:

  5. Windows Live ID是OpenID提供商吗?

    不,WindowsLiveID不是OpenID提供商.他们使用专有协议.自从他们的“测试版”期结束以来,他们从未宣布计划继续它.

  6. 如果我在代码中进行了更改,是否需要重新安装Windows服务?

    我写了一个Windows服务并安装它.现在我对代码进行了一些更改并重新构建了解决方案.我还应该重新安装服务吗?不,只需停止它,替换文件,然后重新启动它.

  7. 带有双引号的字符串回显使用Windows批处理输出文件

    我正在尝试使用Windows批处理文件重写配置文件.我循环遍历文件的行并查找我想要用指定的新行替换的行.我有一个’函数’将行写入文件问题是%Text%是一个嵌入双引号的字符串.然后失败了.可能还有其他角色也会导致失败.如何才能使用配置文件中的所有文本?尝试将所有“在文本中替换为^”.^是转义字符,因此“将被视为常规字符你可以尝试以下方法:其他可能导致错误的字符是:

  8. .net – 将控制台应用程序转换为服务?

    我正在寻找不同的优势/劣势,将我们长期使用的控制台应用程序转换为Windows服务.我们为ActiveMQ使用了一个叫做java服务包装器的东西,我相信人们告诉我你可以用它包装任何东西.这并不是说你应该用它包装任何东西;我们遇到了这个问题.控制台应用程序是一个.NET控制台应用程序,默认情况下会将大量信息记录到控制台,尽管这是可配置的.任何推荐?我们应该在VisualStudio中将其重建为服务吗?我使用“-install”/“-uninstall”开关执行此操作.例如,seehere.

  9. windows – 捕获外部程序的STDOUT和STDERR *同时*它正在执行(Ruby)

    哦,我在Windows上:-(实际上,它比我想象的要简单,这看起来很完美:…是的,它适用于Windows!

  10. windows – 当我试图批量打印变量时,为什么我得到“Echo is on”

    我想要执行一个简单的批处理文件脚本:当我在XP中运行时,它给了我预期的输出,但是当我在Vista或Windows7中运行它时,我在尝试打印值时得到“EchoisOn”.以下是程序的输出:摆脱集合表达式中的空格.等号(=)的两侧可以并且应该没有空格BTW:我通常在@echo关闭的情况下启动所有批处理文件,并以@echo结束它们,所以我可以避免将代码与批处理文件的输出混合.它只是使您的批处理文件输出更好,更清洁.

返回
顶部