Vagrant 的安装使用

Vagrant 是使用命令行即可方便管理的虚拟机, 底层使用 virtualbox 或者 VMWare, 支持在 Windows, macOS 和 Linux 多种系统.

使用 Vagrantfile 实现统一配置, 可以用 Shared Folder 与主机直接进行文件系统映射, 使用 Provisioning Script 实现运行环境的快速建立.

安装

Vagrant

进入 Vagrant 官网 下载对应系统的安装文件.

安装方法参考: https://www.vagrantup.com/docs/installation/

Windows 和 MacOS 都是双击后下一步直到完成, CentOS 是 rpm -ivh xxx.rpm 按提示输入选项确认.

PS: Windows 10 安装可能会出现 Hyper-V 的问题, 参考另一篇文章.

Virtual Box

进入 Virtual Box 官网

选择对应的安装系统, Windows 和 MacOS 仍然是双击后下一步, Linux 不同发行版本有各自的安装方法.

配置虚拟环境

  1. VirtualBox 镜像存储位置

VirtualBox - 管理 - 全局设置 - 常规 - 默认虚拟电脑位置 - (选择一个空间大的盘符)

  1. Vagrant 镜像存储位置

配置环境变量 VAGRANT_HOME.

默认 Windows 是 C:\USERNAME\.vagrant.d, Mac 是 /Users/USERNAME/.vagrant.d

Windows 修改环境变量方法
MacOS 和 Linux 用户在 ~/.bashrc 里面指定 export VAGRANT_HOME='/data/.vagrant.d'

Vagrant 管理命令

Vagrant 镜像管理

  • 查看当前本机镜像 vagrant box list
  • 删除镜像 vagrant box remove BOX_NAME
  • 添加 box 到本地仓库: vagrant box add BOX_NAME [URL/FILE]

Vagrant 初始化虚拟机 - 创建 Vagrantfile

  • 创建 Vagrantfile: vagrant init [BOX_NAME/URL]
  • 校验 Vagrantfile: vagrant validate

Vagrant 虚拟机的管理

初始化

  • provision 准备虚拟机依赖环境
  • up 准备虚拟机依赖环境, 并且初始化启动

基本操作

  • status 展示当前 Vagrantfile 对应的虚拟机信息
  • suspend 暂停虚拟机
  • resume 恢复暂停的虚拟机
  • reload 重启虚拟机, 重新加载 Vagrantfile 配置
  • halt 关闭虚拟机
  • destroy 关闭虚拟机, 并且删除所有相关文件信息

连接

  • powershell 使用 powershell 连接虚拟机
  • rdp 使用 RDP 连接虚拟机
  • ssh 使用 SSH 连接虚拟机

管理

  • global-status 展示当前用户下所有虚拟机信息
  • package 将当前运行的虚拟机打包成镜像
  • snapshot 管理快照: 保存, 回滚…

其他操作

  • plugin : manages plugins: install, uninstall, update, etc.
  • port : displays information about guest port mappings
  • push : deploys code in this environment to a configured destination
  • ssh-config : outputs OpenSSH valid configuration to connect to the machine
  • upload : upload to machine via communicator

虚拟机创建实战

创建, 启动, 登录, 开关机, 查看状态, 销毁

  1. 初始化: vagrant init CentOS/7, 生成 vagrantfile 文件, 定义依赖 box 为 CentOS/7
  2. 启动虚拟机: vagrant up, 这时候因为本地没有 CentOS/7 的镜像, 会从网上下载.
  3. 正常启动后, 打开 Virtual Box 可以看到已经出现了一个正在运行的虚拟机.
  4. 在当前文件夹下, 可以看到 .vagrant 文件夹, 里面存放着虚拟机文件.
  5. 命令行查看当前虚拟机状态: vagrant status
  6. 命令行链接到虚拟机: vagrant ssh MACHINE_NAME, vagrant 和 root 账号的密码都为 vagrant.
  7. 尝试挂起, 关机, 重启: vagrant suspend, vagrant halt, vagrant reload.
  8. 查看虚拟机状态: vagrant global-status
  9. 销毁虚拟机: vagrant destroy MACHINE_NAME, 虚拟机中的一切将被删除, 慎用.

快照管理

  1. 创建快照 vagrant snapshot save SNAPSHOT_NAME
  2. 查看快照 vagrant snapshot list
  3. 恢复到指定快照 vagrant snapshot restore SNAPSHOT_NAME
  4. 删除快照 vagrant snapshot delete SNAPSHOT_NAME

与主机共享文件

共享文件的配置, 需要更改 Vagrantfile 后重启.

1
2
3
4
5
6
7
8
9
config.vm.synced_folder
"host_dir" // 必须, 主机路径, 绝对地址/相对于Vagrantfile 地址
,"vm_dir" // 必须, 虚拟机绝对路径
,create:boolean // 默认false, 若配置为true, 虚拟机目录若不存在则自动创建
,disabled:boolean // 默认false, 若为true, 则禁用该项挂载
,owner:string // 默认vagrant, 虚拟机系统下文件所有者(虚拟机无此用户会报错)
,group:string // 默认vagrant, 虚拟机系统下文件所有组( 虚拟机无此组会报错)
,mount_options:["dmode=775","fmode=664"] // 默认权限777, dmode配置目录权限, fmode配置文件权限
,type:string // 指定文件共享方式, 例如'nfs', vagrant默认根据系统环境选择最佳的文件共享方式

网络配置

支持三种网络配置: 端口转发(默认)、私有网络、公有网络

端口转发(forwarded ports)

  1. 定义: 虚拟机端口与主机端口一一映射, 访问主机端口则转发到虚拟机端口, 和 docker 的 port 一样.
  2. 有点: 容易实现局域网可访问的虚拟机
  3. 缺点: 一对一映射配置麻烦, 不支持在宿主机使用小于 1024 的端口来转发.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Vagrant.configure("2") do |config|
config.vm.network
"forwarded_port" // 必须 端口转发标识
, guest: [int] // 必须 虚拟机端口
, host: [int] // 必须 宿主机端口, 值必须大于1024
,guest_ip: [string] // 可选 虚拟机端口绑定虚拟机ip地址
,host_ip: [string] // 可选 虚拟机端口绑定宿主机ip
,protocol: [string] // 可选 指定通信协议,可以使用tcp/udp,默认tcp
,auto_correct: [bool] // 可选 true/false, true:每次开启虚拟机时检查是否端口冲突
end
Vagrant.configure("2") do |config|
config.vm.network
"forwarded_port"
,guest: 80
,host: 8080
,auto_correct: true
end

guest_iphost_ip 两项配置为空, 则局域网下的所有设备都可以访问该虚拟机.

私有网络(private networks)

  1. 定义: 宿主机可访问, 同在一个网段的多个虚拟机可以访问.
  2. 有点: 安全
  3. 缺点: 局域网无法使用
1
2
3
4
5
6
7
8
9
10
Vagrant.configure("2") do |config|
config.vm.network
"private_network" //必须, 私有网络标识
,ip: [string] // 必须 私有ip可以自行指定
end
Vagrant.configure("2") do |config|
config.vm.network
"private_network"
,ip: "192.168.65.12"
end

公有网络(public networks)

  1. 定义: 公有网络是指设置虚拟机和宿主机有相同的网络配置
  2. 优点: 局域网可用
  3. 缺点: 只有有网络情况下可访问
1
2
3
4
5
6
7
8
9
10
11
12
Vagrant.configure("2") do |config|
config.vm.network
"public_network" // 必须 公有网络标识
,ip: [string] // 可选 配置静态ip
,bridge: [string/array] // 可选 设置桥接的网卡
end
Vagrant.configure("2") do |config|
config.vm.network
"public_network"
,ip: "192.168.0.12"
,bridge: "en1: Wi-Fi (AirPort)"
end

文章全部内容参考: https://blog.csdn.net/zsl10/article/details/52045979

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.