Vagrant冒险记(一)
1.Vagrant简要介绍
Vagrant实际上一套虚拟机管理工具
,基于Ruby开发,底层支持VirtualBox、VMware甚至AWS、Docker等作为虚拟化系统。我们可以通过Vagrant封装一个Linux的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行。Vagrant本身并没有能力创建虚拟机,它是调用一些虚拟化工具来创建,如HyperV、VirtualBox, VMWare。
2.Vagrant快速上手
通常的做法是命令行直接初始化并启动虚拟机,由于网络原因拉取vagrant cloud的box文件经常会失败,实际测试时先手动下载box文件,再通过vagrant box add添加本地box文件,后续流程不变。
注意:笔者测试环境采用Windows的HyperV作为Vagrant的Provider,box镜像是Ubuntu22.04版本!
通过自带的Hyper-V管理器查看刚刚创建的虚拟机,包括虚拟机名称、状态、CPU使用率、内存分配、运行时间等。
3.Vagrant基本操作
Vagrant的基础操作包括启动、查看状态、SSH连接、暂停、恢复、重启、关闭、销毁虚拟机。
4.Vagrant配置文件
查看一下Vagrant相关的文件,包括Vagrantfile和虚拟机相关数据文件
启动一个CentOS7的虚拟机实例,查看相关的Vagrantfile的内容,初始创建的Vagrantfile中只有下面三行:
1
2
3 Vagrant.configure("2") do |config|
config.vm.box = "centos7"
end
增加Vagrantfile的配置项config.vm.hostname,重新加载并启动虚拟机实例,更多配置项见config.vm-Vagrantfile。
1
2
3
4 Vagrant.configure("2") do |config|
config.vm.box = "centos7"
config.vm.hostname = "vagrant-demo"
end
关于SSH连接的小知识:默认Vagrant使用
虚拟机实例特定
的非对称密钥对进行安全连接,即虚拟机实例内部提前插入公钥,Vagrant保存私钥,保证安全无密码登录。
增加Vagrantfile的配置项config.ssh.insert_key,重新加载并启动虚拟机实例,更多配置项见config.ssh-Vagrantfile。
1
2
3
4 >Vagrant.configure("2") do |config|
config.vm.box = "centos7"
config.ssh.insert_key = false
>end
Vagrant如何使用一个Vagrantfile创建多个不同Host呢,其实需要config.vm.define配置项:
1
2
3
4
5
6
7
8
9
10
11
12
13 Vagrant.configure("2") do |config|
# 全局配置
config.vm.box = "centos7"
config.vm.hostname = "test"
# 具体Host配置
config.vm.define "web-server" do |web|
web.vm.hostname = "web"
end
# 具体Host配置
config.vm.define "database" do |db|
db.vm.hostname = "db"
end
end
使用Ruby的循环语法优化上面的Vagrantfile:
1 | host_lit = [ |
利用SMB实现主机与虚拟机实例共享文件夹,需要新增配置项config.vm.synced_folder
1
2
3
4
5 Vagrant.configure("2") do |config|
config.vm.box = "centos7"
config.vm.hostname = "test"
config.vm.synced_folder ".", "/vagrant", type: "smb"
end