一,需要虚拟机的配合,新版支持virtualbox和vmware,这里以virtualbox为例

1. 下载并安装virtualbox

下载地址:https://www.virtualbox.org/wiki/Downloads

 

2.下载并安装vagrant

下载地址:https://www.vagrantup.com/downloads.html

安装过程依旧没什么难的,跟着提示一步一步next。

注意:下载的时候,virtualbox和vagrant的版本要搭配,建议都下载最新版的。还有就是要根据自己的操作系统版本进行选择32位或者64位下载。在windows系统中,可能还需要配置环境变量以及一定要开启VT-x/AMD-V硬件加速

在windows下安装vagrant,为了写入相应配置到环境变量,可能会要求重新启动一下系统,或者可以自己将bin目录配置进环境变量,可不需重启系统

二,基本命令

1,box的安装:

vagrant box add {title} {url} or {path}

可以到官网下载box,下载所需的 Boxes :http://www.vagrantbox.es/

也可以指定链接地址:

例: 

vagrant box add centos7.2 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box

或者在初始化新时直接指定来源地址

vagrant init centos7.2 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box

默认会下载到 C:\Users\youpcname\.vagrant.d\boxes 这个目录下,可以修改环境变量改变路径:

WIN

setx VAGRANT_HOME “X:/your/path”
setx VAGRANT_HOME “X:/your/path” /M (系统变量) 需要以管理员身份运行powershell或cmd

Linux

export VAGRANT_HOME=’/path/to/vagrant_home’。

可以使用命令查看已安装的box

vagrant box list

2,因为本地目录会与vagrant目录共享,所以安装后为了方便管理查看可以cd到一个空目录,执行 vagrant init {box_name} 命令,此命令会在当前目录下生成Vagrantfile文件,当前初始化的目录即会与vagrant根目录(/)下的vagrant目录共享。

3,打开virtualbox虚拟机后,执行 vagrant up 命令,此时将启动当前的box,此例中为centos7.2环境,启动后可以使用 vagrant ssh 命令登入虚拟机,或者可以使用ssh软件,ip为127.0.0.1 账号和密码均为 vagrant 。

 

三,自定义共享目录

通过上文可知,vagrant init 初始化的目录为默认的共享目录,有时我们需要共享更多的目录。

vagrant的共享目录类型有:

默认的共享类型配置为:

打开初始化目录下的vagrantfile文件,找到 #config.vm.synced_folder 一般在第46行左右,去掉前面的#号注释,并添加自定义的目录内容:

config.vm.synced_folder "../data", "/vagrant_data",create:true,owner:"root",group:"root"

其中 ../data 为本地的目录,这里指相对于vagrantfile文件的上层目录下的data文件夹(目录),/vagrant_data为box虚拟机里面的目录,create:true表示不存在则创建,并且拥有者和用户组都是root。

修改后使用vagrant reload 重新加载vagrantfile文件,此时登陆vagrant ssh 后即可看到/vagrant_data目录,并且本地也有了data目录与之共享对应。

可自行创建文件测试是否会共享。

四,配置私有网络,需不与本机在同一网段。

这种网络配置下,只有主机可以访问虚拟机,如果多个虚拟机设置定在同一个网段也可以相互访问,当然虚拟机也是可以访问外部网络的。配置语法如下:

config.vm.network "private_network", ip: "192.168.1.100" # 固定IP

还可以设置动态IP,配置语法如下:

config.vm.network "private_network", type: "dhcp"

优点:安全,只能自己访问。

缺点:因私有原有,所以其他团队成员不能和你协作。

打开vagrantfile文件,找到 #config.vm.network "private_network",一般在第35行,将#号注释符去掉,并将后面的ip地址换为与本地pc同ip段的地址,这里是192.168.22.10,首先先ping下看,并不通:

配置vagrantfile后重启(reload)vagrant,使配置修改生效。

如果配置私有网络后无法启动virtualbox,报错:Failed to create the host-only adapter:

那么去试试如下方法:

下载补丁:https://www.virtualbox.org/attachment/ticket/14040/VBox-Win10-fix-14040.exe
下载后,右键,以管理员权限运行,运行后只会有一个白色小框,上面描述了这个补丁的基本信息。
命令中再次执行vagrant reload。

如果仍然不行,把这个补丁扔到virtualbox安装目录去再试试,并且禁用并再次启用下本地电脑的网卡

一般这样都能解决问题,还不行的话下载个QQ电脑管家把注册表清理一遍后再试。

综上还不能解决,那就拿着错误码谷歌和百度吧。

启动没有问题后能看到设置的私有网络ip地址:

五,配置公有网络

Public network(公有网络),需要与本机在同一网段。

这种配置下,虚拟机享受实体机一样的待遇,一样的网络配置,vagrant 1.3版本以后这种配置也支持设定固定IP,配置语法如下:

config.vm.network "public_network", ip: "192.168.22.100"

还可以设置桥接网卡,配置语法如下:

config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)"

优点:方便团队协作,别人可以访问你的虚拟机。

缺点:需要有网络,有路由器分配IP

官网配置文档地址:https://www.vagrantup.com/docs/networking/public_network.html

打开Vagrantfle文件,一般在第40行左右,#config.vm.network "public_network" 去掉前面的#号注释符,并添加 , ip: "192.168.22.100",注意逗号。

添加完毕后reload 重新加载配置。如果reload后 network interface  没有可选项,只能ctrl+c 强制停止,那么就无法再次reload,会报错:

An action 'reload' was attempted on the machine 'default',
but another process is already executing an action on the machine.
Vagrant locks each machine for access by only one process at a time.
Please wait until the other Vagrant process finishes modifying this
machine, then try again.

那么如果是linux ,查找 ruby 和 vagrant 并杀掉

  1. ps -ef | grep ruby   

  2. ps -ef | grep vagrant  

  3. kill -9 14672   

如果是windows同理,

PS D:\> tasklist|findstr "vagrant"
PS D:\> tasklist|findstr "ruby"

PS D:\> tasklist|findstr "ruby"
ruby.exe                     10328 Console                    1      7,012 K
PS D:\> kill 10328

如果上述不能解决则:

运行“sc.exe query vboxdrv”检测vboxdrv的运行状态。 如果"STATE"是“RUNNING”执行上述步骤,如果"STATE"不是“RUNNING”,则需要启动该服务

启动命令“sc start vboxdrv" 启动后,显示为:

如果启动失败,可以尝试重新安装vboxdrv。

找到安装目录下的vboxdrv文件夹,如C:\Program Files\Oracle\VirtualBox\drivers\vboxdrv, 右击VBoxDrv.inf,选安装

然后重启电脑就可以正常运行了。

 

这个解决后还需要解决 network interface没有可选项找不到本地桥接网卡的问题:

选择更改适配器选项,找到本地以太网连接,选择 安装  --- > 服务 ---->磁盘安装 选择 VirtualBox 安装目录,

找到 目录文件 D:\VirtualBox\drivers\network\netflt

点击VBoxNetFlt.inf 或 VBoxNetFltM.inf安装问题就可以解决.

大概截图如下:

综上基本能配置公有ip了,如果 启动时需要选择桥接网卡比较麻烦,可以在后面追加网络接口,如下

  config.vm.network :public_network,:bridge=>'en1: Wi-Fi (AirPort)'

六,还有一种网络是端口映射

端口映射(Forwarded port)

    这种方式,就是把本机和虚拟机的端口进行映射。比如:我配置本机计算机的8080端口为虚拟机的80端口,这样我访问该机器的8080端口,vagrant会把请求转发到虚拟机的80端口是那个去处理。

打开Vagrantfile文件,一般在第31行左右,

config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

guest为虚拟机配置,host为本主机配置,即在本地访问127.0.0.1:8080会映射到虚拟机的80端口。

优点:简单、容易理解、容易实现外网访问虚拟机。

缺点:需映射很多端口时较麻烦、不支持在宿主机器上使用小于1024的端口来转发(如:不能使用SSL的443端口来进行https连接)。

官网配置文档地址:https://www.vagrantup.com/docs/networking/forwarded_ports.html

七, 虚拟机优化

  • 自定义虚拟机名称,即Virtualbox中看到的名字

  • Vagrant.configure("2") do |config|
        config.name = "centos=7.2"
    end
    
  • 自定义虚拟机主机名称,即ssh登陆后的名字

    config.vm.hostname="centos7.2"
    
  • 自定义虚拟机内存和CPU

    Vagrant.configure("2") do |config|
      config.name = "centos7.2"
      config.memory = "1024"
      config.cpus = 2
    end
    

    配置好后重启虚拟机,然后进入虚拟机:

    使用top命令然后再按1显示当前CPU个数:

  

  使用free -m命令显示当前虚拟机内存:

  

5. 打包分发

​   当我们基于一个box启动一个虚拟机以后,我们在里面部署了专属自己的环境,那这个时候我们想要把自己的这套配置好的环境共享给别人怎么办呢?答案是将虚拟机打包分发。命令如下:

vagrant package [--output new_box_name]

新生成的box名称是选填的,默认为package.box。

常用命令列表:

命令作用
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的所有环境状态
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐