用VirtualBox+Vagrant搭建开发环境

简介

VirtualBox是一种跨平台的虚拟化应用,可以在宿主主机上通过安装镜像来模拟出其他操作系统环境。

Vagrant是一种用于构建、管理虚拟机环境的工具,减少开发环境搭建时间,提高生产力。

VirtualBox

安装

  • 根据你当前主机操作系统类型下载相应的VirtualBox,当前最新版本VirtualBox 6.0.0,直接安装即可
  • 下载与VirtualBox 6.0.0匹配的Extension Pack

配置

  • 指定虚拟机文件存储路径 File->Preferences->General->Default Machine Folder
  • 添加VirtualBox 6.0.0 Extension Pack File->Preferences->Extensions->+

使用

  • 通常,我们要手动下载虚拟机文件,然后在VirtualBox中手动配置、创建虚拟机等
  • 这次,我们借助Vagrant来实现自动化,详见下方

Vagrant

  • 根据你当前主机操作系统类型下载相应的Vagrant,直接安装即可
  • Windows下安装要注意关闭Hyper-V
    • 【控制面板】-【程序与功能】-【打开或关闭Windows功能】-取消【Hyper-V】勾选

Vagrant Box

简介

下载

  • 在上方的官方网址中搜索CentOS,注意Provider为VirtualBox,当前最新1812.01
  • 下载链接:
    • https://app.vagrantup.com/centos/boxes/7/versions/{version}/providers/{provider}.box
      • {version} = 1812.01
      • {provider} = virtualbox
    • https://app.vagrantup.com/centos/boxes/7/versions/1812.01/providers/virtualbox.box

快速使用

添加Vagrant Home环境变量

  • 添加环境变量VAGRANT_HOME = "G:\vagrant"
  • 将环境变量VAGRANT_HOME添加到PATH=%PATH%;%VAGRANT_HOME%

创建工作目录

1
2
$ mkdir -p ~/vagrant/centos7
$ cd ~/vagrant/centos7

添加插件

1
2
# 安装Vagrant插件自动安装virtualbox guest additions
[~/vagrant/centos7]$ vagrant plugin install vagrant-vbguest

添加Box文件

1
2
3
4
# 手动添加一个名为name的Box
[~/vagrant/centos7]$ vagrant box add {box_name} {/path/to/local/box or /url/to/web/box}
# 查看
[~/vagrant/centos7]$ vagrant box list

实例化虚拟机

1
2
# 实例化一个name虚拟机
[~/vagrant/centos7]$ vagrant init {box_name}

配置Vagrantfile

基础配置

  • ~/vagrant/centos7下有一个Vagrantfile

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    # 设置同步文件夹
    # 关闭默认同步文件夹
    config.vm.synced_folder ".", "/vagrant", disabled: true
    # 在Vagrantfile所在目录创建data目录,并指定为同步文件夹
    # 同时为文件夹设定权限
    config.vm.synced_folder "./data", "/vagrant",
    type: "virtualbox",
    owner: "vagrant",
    group: "vagrant"

配置网络

开启密码登录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 启动虚拟机
[~/vagrant/centos7]$ vagrant up

# SSH登录
[~/vagrant/centos7]$ vagrant ssh

# 开启密码登录
$ sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
$ sudo systemctl restart sshd

# 从虚拟机中退出
$ exit

# 停止虚拟机
[~/vagrant/centos7]$ vagrant halt
  • 可以使用Xshell等工具,利用用户名和密码登录,默认均为vagrant。
  • 地址:127.0.0.1:2222

打包虚拟环境

1
2
3
4
5
# 查看当前运行状态
[~/vagrant/centos7]$ vagrant status

# 将当前运行的虚拟机换环境打包成可重用的box,名称为{pkg_virtualbox}.box
[~/vagrant/centos7]$ vagrant package  --output /path/to/{pkg_virtualbox}.box

将该打包后的box重新加载到Vagrant,此后根据该打包后的box创建虚拟运行环境更方便

命令简介

Box管理命令

1
2
3
4
5
6
7
#添加一个box
$ vagrant box add {box_name} {path/to/local/box or url/to/web/box}

#查看本地已添加的box
$ vagrant box list

$ vagrant box remove {box_name}

虚拟机管理命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 根据{name}Box初始化一个虚拟机
$ vagrant init {box_name}

#根据目录中的Vagrantfile启动虚拟机
$ vagrant up

# 暂停本地环境
$ vagrant suspend

# 恢复本地环境
$ vagrant resume

#关闭虚拟机
$ vagrant halt 

#重启虚拟机=修改了Vagrantfile后,使之生效相当于先halt再up
$ vagrant reload 

#进入虚拟环境
$ vagrant ssh

#退出虚拟机环境
$ exit

#当前正在运行的虚拟环境打包成一个可重复使用的box
$ vagrant package

#销毁虚拟机
$ vagrant destroy 

Vagrantfile高级定制

TODO

参考链接