欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

VirtualBox+vagrant使用

程序员文章站 2024-02-24 10:41:28
...

1. 安装VirtualBox

去官网
https://www.virtualbox.org/wiki/Downloads下载最新版的Virtualbox,然后双击安装,一直点击确认完成

2. 安装vagrant

去官网下载最新版的vagrant
https://www.vagrantup.com/downloads.html,然后双击安装,一直点击确认完成。在windows下安装vagrant,为了写入相应配置到环境变量,系统可能会要求重新启动。在命令行中,输入vagrant,查看程序是不是已经运行了。如果不行,请检查一下$PATH里面是否包含vagrant所在的路径

项目设置:
配置任何vagrant项目的第一步都是创建vagrantFile,创建VagrantFile文件的目的有两个

  1. 标记项目的根目录,Vagrant中的许多配置选项都与此更目录相关
  2. 描述运行项目所需的机器和资源类型,以及安装的软件和访问方式

Box:
Vagrant 使用基本映像快速克隆虚拟机,这些映像在Vagrant中被称之为Box,指定用于Vagrant环境的Box始终是创建新的VagrantFile的第一步

安装Box:方法一
使用名称直接添加一个box,如果盒子不存在时会在hashicorpCloud上寻找免费的映像

   vagrant box add hashicorp/precise64

这将从Hashicorp的vagranthttps://app.vagrantup.com/boxes/search Cloud(vagrant云)下载名为“hashicorp/percise64”的box,在这里虽然可以找托管的盒子,能轻易的从hashicorp的vagrantCloud下载盒子,但也可以从本地文件或者自定义url等方式添加盒子
为当前用户创建全局存储Box,每个项目都使用一个Box作为初始化映像进行克隆,并且永远不会修改实际的基本映像,这意味着如果你有两个项目都使用一个Box,则在另一台客户机中添加文件对另一台机器没有影响 ,在上面命令中Box 是使用的命令空间,框被分为两部分:由用户和Box名称组成,用斜杠分割
命名空间不保证规范的盒子!一个常见的误解是像“ubuntu”这样的命名空间代表了Ubuntu盒子的规范空间。这是不真实的。例如,Vagrant Cloud上的命名空间与GitHub上的命名空间的行为非常相似。正如GitHub的支持团队无法协助某人的存储库中的问题一样,HashiCorp的支持团队无法协助第三方发布的框。

  • 获取下载box链接方法(自己实践得出),可以通过添加hashicorpCloud的免费盒子获取下载地址

例如下载:centos/7

E:\Box\centos7-v2>vagrant box add centos/7
==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice:
Invalid choice. Try again:
Invalid choice. Try again:
Invalid choice. Try again:  3
==> box: Adding box 'centos/7' (v1902.01) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/1902.01/providers/virtualbox.box
    box: Download redirected to host: cloud.centos.orgining: --:--:--)
    box: Progress: 1% (Rate: 13231/s, Estimated time remaining: 8:38:54))

从上面的信息可以找到https://vagrantcloud.com/centos/boxes/7/versions/1902.01/providers/virtualbox.box 为centos7的下载地址

安装Box:方法二
使用命令vagrant init hashicorp/precise64初始化一个盒子,填写配置信息

Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise64"
end

hashicorp/precise64 是你对应添加的名称,如果你之前未添加Box,Vagrant将自动下载并运行时添加该Box,你可以通过指定config.vm.box_version来指定显示Box的版本:

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.box_version = "1.1.0"
end

通过 config.vm.box_url来指定Box的Url

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.box_url = "https://vagrantcloud.com/hashicorp/precise64"
end

最后通过vagrant up命令去启动你的盒子

2.1 修改vagrant box 的存放路径

如果你的磁盘足够大的话,就可以忽略此步骤
默认情况下安装的box存放路径是放在~/.vagrant.d/boxes下面的,如果你的boxes越来越多,悲剧的发现磁盘没空间了,那么就需要修改Vagrant的boxes存放路径

  1. copy ~/.vagrant.d/boxes 到你新的文件目录
  2. 设置环境变量
    VAGRANT_HOME=‘新的文件目录’
    官方环境变量,参考地址

3. VagrantFile同步文件夹

vagrant默认同步vagrantFile目录,如果需要文件目录路径,需要在VagrantFile中使用config.vm.synecd_folder配置同步文件夹

语法如下:

config.vm.synced_folder   
   "your_folder"(必须)   //物理机目录,可以是绝对地址或相对地址,相对地址是指相对与vagrant配置文件所在目录
  ,"vm_folder(必须)"    // 挂载到虚拟机上的目录地址
  ,create(boolean)--可选     //默认为false,若配置为true,挂载到虚拟机上的目录若不存在则自动创建
  ,disabled(boolean):--可选   //默认为false,若为true,则禁用该项挂载
  ,owner(string):'www'--可选   //虚拟机系统下文件所有者(确保系统下有该用户,否则会报错),默认为vagrant
  ,group(string):'www'--可选   //虚拟机系统下文件所有组( (确保系统下有该用户组,否则会报错),默认为vagrant
  ,mount_options(array):["dmode=775","fmode=664"]--可选  dmode配置目录权限,fmode配置文件权限  //默认权限777
  ,type(string):--可选     //指定文件共享方式,例如:'nfs',vagrant默认根据系统环境选择最佳的文件共享方式

4. VagrantFile网络

  1. 端口转发:
    端口转发允许指定来宾计算机上的端口,以通过主机计算上的端口进行共享,这允许访问自己计算机的端口,但实际上将所有的网络流量转发到来宾计算机的端口上。设置一个端口转发,以便我们可以在访问中访问服务
Vagrant.configure("2") do |config|
 config.vm.box = "hashicorp/precise64"
 config.vm.provision :shell, path: "bootstrap.sh"
 config.vm.network :forwarded_port, guest: 80, host: 4567
end

5. VagrantFile执行外部脚本配置

shell配置程序可以选择指定主机上的shell脚本路径,vagrant会将脚本上传到指定虚拟机并执行,配置命令如下:

Vagrant.configure("2") do |config|
  config.vm.provision "shell", path: "script.sh"
end

相对路径相对于vagrantFile的位置进行扩展,也可以使用绝对路径,如果你配置中使用的是远程脚本,则可以将URl作为path参数传递,如下:

Vagrant.configure("2") do |config|
  config.vm.provision "shell", path: "https://example.com/provisioner.sh"
end

6. 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所有环境的状态

安装过程中发现的问题

  1. 提示:unknown filesystem type ‘vboxsf’
    安装插件
vagrant plugin install vagrant-vbguest
vagrant reload --provision

centos7 网盘下载地址

链接: https://pan.baidu.com/s/101lTxs6uXrXQFWBE1ZSMpQ 提取码: 5821

vagrantFile实例:

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  config.vm.box = "dev-c7"
  config.vm.network "forwarded_port", guest: 22, host: 2222, host_ip: "127.0.0.1" , id:"ssh"
  config.vm.network "forwarded_port", guest: 3306, host: 3306, host_ip: "127.0.0.1" , id:"mysql"
  config.vm.network "forwarded_port", guest: 80, host: 80 , id:"http"
  config.vm.synced_folder "./data", "/data",create:true, type: "virtualbox"
  config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
    vb.memory = "1024"
  end
end

virtualBox 启动脚本

当我们安装完成virtualBox之后,进入它的安装目录你会发现有个VBoxManage.exe这个文件,这个文件就是管理VirtualBox的一个工具,可以在当前目录下执行VBoxManage命令来查看所有指令

@echo off
set vname=dev_default_1570093427088_7570
set path=D:\Program\VirtualBox
path %path%
VBoxManage startvm %vname% --type headless
exit

vagrant 启动脚本

@echo off
set diskName=E:
set batPath=%diskName%/dev
%diskName%
cd %batPath%
@echo on
vagrant up
exit

相关标签: 环境