vagrant笔记:使用记录

作者注:本文将不定时更新

本文总结一些 VirtualBox 和 Vagrant 的使用经验。主要有:
Windows 系统下的搭建。
TODO:Linux 系统搭建。

一、环境及说明

Vagrant 依赖于 VirtualBox,故两者要安装。
另外可先下载 Vagrant 官方做好的镜像,也可使用 Vagrant 命令下载。
本文所有命令在 git bash 上执行。

二、安装

2.1 VirtualBox下载

地址: https://www.virtualbox.org/wiki/Downloads。
下载版本:VirtualBox-6.0.14-133895-Win.exe。
安装之。

2.2 Vagrantt 下载

https://www.vagrantup.com/downloads.html
选择 Windows 64-bit 下载。
下载版本: vagrant_2.2.6_x86_64.msi。
安装之。
Vagrantt 官网镜像列表: https://app.vagrantup.com

2.3 下载ubuntu1604镜像

https://app.vagrantup.com/ubuntu/boxes/xenial64/

选择版本,最新版为 20191126.1.0。
在URL后添加 /providers/virtualbox.box。
https://app.vagrantup.com/ubuntu/boxes/xenial64/versions/20191126.1.0/providers/virtualbox.box

2.4 其它镜像

centos7:
https://vagrantcloud.com/centos/boxes/7/versions/1905.1/providers/virtualbox.box
FreeBSD:
https://app.vagrantup.com/generic/boxes/freebsd11/providers/virtualbox.box

三、安装虚拟机

3.1 方式一:配置文件

进入某个目录,以此为工作目录(如:e:\project\vagrant),创建 vagrantfile 文件。内容如下:

1
2
3
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
end

启动:

1
vagrant up

注:由于未下载镜像,此命令会自动下载,接着启动虚拟机。如果网络不好,下载较耗时。

3.2 方式二:先下载,再导入

参考前文下载好虚拟机镜像压缩包。放到某目录(如:e:\project\vagrant),在此目录打开git bash。
导入、初始化、启动:

1
2
3
vagrant box add ubuntu1604 xenial-server-cloudimg-amd64-vagrant.box
vagrant init ubuntu1604 # 此命令生成Vagrantfile配置文件
vagrant up # 启动

四、导出虚拟机

场合:在某个虚拟机做了配置、安装软件,在此为基础,再做其它事,导出之。
进入 VirtualBox 安装目录,如 D:\Program Files\Oracle\VirtualBox 。执行 vboxmanage list vms。为方便使用,最好将该路径添加到环境变量 PATH 中。

1
2
$ VBoxManage.exe list vms
"ubuntugolang_default_1575877892887_70070" {8fae8ed7-dfce-4298-8689-526febccde69}

第一列即为虚拟机名称。
导出:

1
vagrant.exe package --base ubuntugolang_default_1575877892887_70070 --output  ./ubuntugolang.box

释义:package 表示打包,–base 指定VirtualBox的镜像文件,–output 指定导出后的镜像文件。
得到的 ubuntugolang.box 再导入为新的虚拟机。
此法适用于将其它虚拟机制作为Vgrant支持的格式。

五、提交镜像

如何将自己的镜像上传到官网?待研究。

六、常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
vagrant box add <box名称> <镜像文件> // 添加一个box
vagrant box list // 列出可用的box
vagrant box remove <box名称> // 删除一个box

vagrant init <虚拟机名称> // 初始化虚拟机
vagrant package // 打包虚拟机
vagrant halt // 关闭虚拟机
vagrant reload // 重启虚拟机
vagrant up // 启动虚拟机
vagrant destroy // 销毁虚拟机,即从 VirtualBox 删除。
vagrant ssh // 使用ssh进入虚拟机

vagrant status // 查看虚拟机状态

七、使用记录

7.1 确认这官方镜像路径

以官方 hashicorp/precise64 为例。初始化:

1
vagrant init hashicorp/precise64

启动:

1
vagrant up

由于未下载镜像,自动下载,提示信息:

1
2
3
4
5
6
7
8
9
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'hashicorp/precise64' could not be found. Attempting to find and install...
default: Box Provider: virtualbox
default: Box Version: >= 0
==> default: Loading metadata for box 'hashicorp/precise64'
default: URL: https://vagrantcloud.com/hashicorp/precise64
==> default: Adding box 'hashicorp/precise64' (v1.1.0) for provider: virtualbox
default: Downloading: https://vagrantcloud.com/hashicorp/boxes/precise64/versions/1.1.0/providers/virtualbox.box
default: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com

从倒数第二行可知道,hashicorp/precise64 镜像的真实路径为 https://vagrantcloud.com/hashicorp/boxes/precise64/versions/1.1.0/providers/virtualbox.box 。如果命令行下载较慢,可使用其它下载工具下载。再导入。

7.2 备忘

使用 vagrant up启动虚拟机后,打开 VirtualBox,即可看到。随后用 vagrant ssh 进入虚拟机。在虚拟机系统中输入 exit 可退出 git bash 命令行。用 vagrant halt 可关闭虚拟机。

默认/vargrant为当前工作目录。

默认没有root密码,需要先ssh到系统,再设置。

不能重复添加相同的虚拟机镜像,先删除再添加。

实际可直接用 VirtualBox 来执行,但 vagrant 多了一些资源及功能。

不要在 VirtualBox 删除虚拟机,否则要重新导入(类似将原始文件删除)。关机即可。

7.3 配置文件

配置文件为 Vagrantfile。建议关闭虚拟机,修改后,再启动。
添加主机名 config.vm.hostname = “workshop”。
更改网络配置为桥接:config.vm.network “public_network”。也可以指定IP:config.vm.network “public_network”, ip: “192.168.0.18”
当前的工作目录为虚拟机的 /vagrant 目录。即使使用 root 创建文件,在 windows 上也可直接读写。

修改内存:打开 config.vm.provider "virtualbox" do |vb|,修改memory即可。

不显示virtualbox界面:将vb.gui改为false。此时不会出现virtualbox界面。

1
2
3
4
5
6
7
config.vm.provider "virtualbox" do |vb|
# Display the VirtualBox GUI when booting the machine
vb.gui = false

# Customize the amount of memory on the VM:
vb.memory = "512"
end

7.4 更改虚拟机镜像保存位置

默认情况下,Vagrant 导入的镜像、创建的虚拟机都在 C 盘,建议悠。
更改导入镜像位置:
添加环境变量 VAGRANT_HOME,值为 d:\vmfiles.vagrant.d。

VirtualBox 更改默认虚拟电脑位置:
管理 -> 全局设置 -> 常规,修改默认位置,如D:\vmfiles.vagrant.d\VirtualBox VMs。
注:原来的C盘目录,也会有文件,不可删除。

7.5 迁移目录

场合:原有分区太小,需要迁移到其它分区。为方便起见,建议只改盘符,保持路径一致。
1、VirtualBox:
将原目录拷贝到新目录,如G:\vmfiles.vagrant.d\VirtualBox VMs。
修改默认虚拟电脑位置,步骤见上。
在 VirtualBox 删除掉所有虚拟机。
控制->注册,选择新目录的虚拟机目录的 vbox 文件。
测试是否可正常运行,再删除原有虚拟机文件。

2、Vagrant操作:
将原目录拷贝到新目录,如 G:\vmfiles.vagrant.d
修改工程目录的 .vagrant\machines\default\virtualbox 目录下 box_meta 文件。将 directory 改为新目录路径。(注:实测发现有部分工程无此文件,不修改亦可正常)。
测试是否正常,再删除原有文件。

如果只想迁移Vagrant,修改 .vagrant\machines\default\virtualbox 目录下的 vagrant_cwd 文件,改路径修改为新的目录路径。(实测发现,如果不需要,在启动时会自动检测,并更新此文件)

八、其它记录

网络相关

使用vagrant时,默认是NAT,IP为10.0.2.15。可以上网,但无法与局域网通信。
如果额外再添加一个桥接网络,可以通信。如果在 Vagrantfile中指定为public网络,此二种情况下,有10网段,也有局域网,但默认网关还是10网段。
个人测试结论:在 k8s 部署时会连不上master。发广播时会发不出去。

多个网络设备选择

1
2
3
4
5
6
==> default: Available bridged network interfaces:
1) 1x1 11bgn Wireless LAN PCI Express Half Mini Card Adapter
2) Realtek PCIe GBE Family Controller
==> default: When choosing an interface, it is usually the one that is
==> default: being used to connect to the internet.
default: Which interface should the network bridge to?

原因:有无线,有有线,需要选择,输入1或2即可。