文章大纲
Vagrant 简介
Vagrant 是一个用于构建完整开发环境的工具,可以大大的缩短我们对虚拟环境的部署和设置。
Vagrant 可以将虚拟机封装为 Box
,它类似于 Container image
,,可以复用,意味着基于同一个 Box
来创建不同的虚拟机,同时它支持多种的虚拟机管理程序,如 VMware
Libvirt
Hyper-V
甚至是容器引擎 Docker
。
Vagrant 除了可以管理虚拟机还可以在虚拟机启动的时候执行命令或脚本,可以方便的进行自动化部署应用或设置环境。
Vagrant 还提供了一个用于定义虚拟环境的配置文件叫 Vagrantfile
类似于 Containerfile
通过这个文件可以定义虚拟机名称,使用的网络,使用的 Box
启动时执行的脚本,存储等定义,可以使用版本控制工具进行管理,方便共享和协作。
因此,使用 Vagrant 有以下优点:
- 统一的环境,一次性打包好
Box
,在任意机器上统一。 - 复用,针对一个
Box
,可以创建 N 个环境,且能通过Vagrantfile
自定义属性。 - 加快环境部署速度,无需从头创建虚拟机。
安装和使用 Vagrant
Vagrant 在不同的操作系统上安装都是非常容易的。
安装
在 Fedora 中,直接通过 dnf
进行安装,因为我使用的是 Libvirt 所以对应的包需要安装:
sudo dnf install vagrant.noarch vagrant-libvirt.noarch
安装完成后可以查看版本:
vagrant --version
Vagrant 2.2.19
下载 Box
Vagrant 目前不支持命令行搜索 Box ,需要从 https://app.vagrantup.com/boxes/search 搜索 Box 。
检索到 Box 名字后通过命令进行下载:
[hcai@P1-Gen4 ~]$ vagrant box add generic/alma9
==> box: Loading metadata for box 'generic/alma9'
box: URL: https://vagrantcloud.com/generic/alma9
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) docker
2) hyperv
3) libvirt
4) parallels
5) virtualbox
6) vmware_desktop
Enter your choice: 3
==> box: Adding box 'generic/alma9' (v4.2.16) for provider: libvirt
box: Downloading: https://vagrantcloud.com/generic/boxes/alma9/versions/4.2.16/providers/libvirt.box
box: Calculating and comparing box checksum...
==> box: Successfully added box 'generic/alma9' (v4.2.16) for 'libvirt'!
查看已下载的 Box :
[hcai@P1-Gen4 ~]$ vagrant box list
generic/alma9 (libvirt, 4.2.16)
使用 Vagrantfile
创建一个空白的工作目录,在目录中编写 Vagrantfile
:
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: <<-SHELL
echo "192.168.100.10 master01 master01.example.com" >> /etc/hosts
echo "192.168.100.11 worker01 worker01.example.com" >> /etc/hosts
echo "192.168.100.12 worker02 worker02.example.com" >> /etc/hosts
SHELL
config.vm.define "master01" do |master|
master.vm.box = "generic/alma9"
master.vm.hostname="master01.example.com"
master.vm.network "private_network",ip: "192.168.100.10",
libvirt__network_name: 'vagrant-lab'
master.vm.provider "libvirt" do |kvm|
kvm.memory = 8192
kvm.cpus = 2
kvm.uri = 'qemu:///system'
end
end
(1..2).each do |i|
config.vm.define "worker0#{i}" do |worker|
worker.vm.box = "generic/alma9"
worker.vm.hostname="worker1#{i}.example.com"
worker.vm.network "private_network",ip: "192.168.100.1#{i}",
libvirt__network_name: 'vagrnt-lab'
worker.vm.provider "libvirt" do |kvm|
kvm.memory = 4096
kvm.cpus = 2
kvm.uri = 'qemu:///system'
end
end
end
end
上面定义了三台 VM,同时指定了使用的网络和具体的 IP 地址,且在虚拟机启动好后会自动配置 /etc/hosts
。
使用 Vagrant 管理虚拟机
在 Vagrantfile
所在的目录中,通过以下常用命令来管理虚拟机:
查看状态:
$ vagrant status
Current machine states:
master01 not created (libvirt)
worker01 not created (libvirt)
worker02 not created (libvirt)
This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.
启动虚拟机:
$ vagrant up
此时将启动定义的三台虚拟机,如果想启动指定的虚拟机可以使用虚拟机的名字作为参数。
销毁虚拟机:
$ vagrant destory
连接虚拟机:
$ vagrant ssh <vm_name>