Vagrant对虚拟机的作用就像Docker对容器的作用一样。Vagrant是对不同管理程序的包装,如VMware Workstation Pro、VMware Player、VirtualBox、Hyper-V、VMware vSphere等。Vagrant使用一个简单的基于文本的配置文件,称为Vagrantfile,以快速建立一个具有支持的虚拟机提供商/hypervisor之一的开发环境。
Vagrant可以根据你的项目要求快速配置虚拟机,并让它们启动和运行。Vagrant的命令行界面也为虚拟机的管理提供了便利。你可以轻松地通过SSH进入任何Vagrant管理的虚拟机,配置它们,摧毁它们,并在运行中重新创建它们。Vagrant简化了开发项目的虚拟机管理,节省了大量的时间。
Vagrant还使得与其他人分享你的工作变得非常容易。你所要做的就是分享你的项目的Vagrant文件,另一边的人可以用Vagrant重新创建一切。
在这篇文章中,我将告诉你如何在Ubuntu 20.04 LTS上安装最新版本的Vagrant,并配置Vagrant使用VMware Workstation Pro 16作为虚拟机提供者。那么,让我们开始吧。
目录
- 你将需要的东西
- 安装所需的依赖性
- 安装Vagrant
- 安装Vagrant VMware工具
- 安装Vagrant VMware Desktop Provider Plugin
- 开始使用Vagrant VMware Desktop Provider
- 总结
- 参考资料
您将需要的东西
要设置Vagrant以使用VMware Workstation Pro 16作为虚拟机提供商,您必须在计算机上安装VMware Workstation Pro 16。
如果你在电脑上安装VMware Workstation Pro 16时需要任何帮助,你可以查看以下文章。
安装所需的依赖性
最新版本的Vagrant可以从Vagrant的官方软件包库中下载。要在Ubuntu 20.04 LTS上添加Vagrant官方软件包库,你必须下载Vagrant官方软件包库的GPG密钥,并将其添加到APT软件包管理器中。 你将需要在命令行中使用curl来完成这项工作。
你可以从Ubuntu 20.04 LTS的官方软件包库中安装curl。
首先,更新APT软件包库的缓存,方法如下。
$ sudo apt update

要安装curl,请运行以下命令。
$ sudo apt install curl -y

curl应该被安装。

安装Vagrant
在本节中,我将向你展示如何从Vagrant的官方软件包库中,在Ubuntu 20.04 LTS上安装最新版本的Vagrant。
首先,下载HashiCorp的GPG密钥,用以下命令将其添加到APT软件包管理器中。
$ curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -

用以下命令将官方Vagrant软件包库添加到APT软件包管理器中。
$ sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"

官方Vagrant软件包库应该被添加。
用下面的命令更新APT软件包库的缓存。
$ sudo apt update

要安装最新版本的Vagrant,请运行以下命令。
$ sudo apt install vagrant -y

APT软件包管理器应该从Vagrant的官方软件包库下载最新版本的Vagrant。

一旦下载了最新版本的Vagrant,它就会把它安装在你的电脑上。

此时,最新版本的Vagrant应该被安装。

一旦Vagrant安装完毕,你应该可以像其他命令一样从命令行中运行vagrant命令。
$ vagrant --version

安装Vagrant VMware工具
要在Vagrant中使用VMware Workstation Pro 16,你必须安装Vagrant VMware Utility。
要下载最新版本的Vagrant VMware Utility,请从您最喜欢的网络浏览器导航到链接VMware Utility Downloads | Vagrant by HashiCorp。
一旦页面加载完毕,点击Debian> 64-bit,如下面的截图所示。

你的浏览器应该提示你保存vagrant-vmware-utility-*.deb包文件。选择保存文件并点击确定。

vagrant-vmware-utility-*.deb包文件应该被下载。

现在,请按以下方式导航到~/Downloads目录。
$ cd ~/Downloads

你刚刚下载的vagrant-vmware-utility_1.0.20_x86_64.deb包文件应该就在这里。

要安装vagrant-vmware-utility_1.0.20_x86_64.deb包文件,请运行以下命令。
$ sudo apt install ./vagrant-vmware-utility_1.0.20_x86_64.deb

APT软件包管理器应该开始安装vagrant-vmware-utility_1.0.20_x86_64.deb软件包。

包文件 vagrant-vmware-utility_1.0.20_x86_64 .deb应该被安装。

安装Vagrant VMware Desktop Provider Plugin
一旦你安装了Vagrant和Vagrant VMware Utility,你可以用以下命令轻松地安装Vagrant插件vagrant-vmware-desktop。
$ vagrant plugin install vagrant-vmware-desktop

Vagrant应该从互联网上下载所有需要的文件。它可能需要几秒钟的时间来完成。

这时,Vagrant插件vagrant-vmware-desktop应该已经安装完毕。

开始使用Vagrant VMware桌面提供者。
在本节中,我将向你展示如何启动和运行一个Vagrant项目。我将设置一个简单的Apache 2网络服务器进行演示。那么,让我们开始吧。
用下面的命令创建一个新的项目目录~/http-server(比方说)。
$ mkdir ~/http-server

按以下方式导航到新创建的项目目录。
$ cd ~/http-server

现在,你需要创建一个新的文件Vagrantfile,指定你想用于Webserver的Vagrant Box,并使用Vagrantfile对其进行配置。
Vagrant Box是Vagrant用来创建新虚拟机的基础虚拟机镜像。
从你喜欢的网络浏览器中访问发现Vagrant Boxes - Vagrant Cloud的链接,你应该看到以下页面。

要搜索VMware Workstation Pro 16 Vagrant Boxes,选择vmware作为提供者,输入你要搜索的操作系统的名称,然后按**。**
你应该看到一个与你的搜索查询相匹配的Vagrant Boxes的列表。你可以在你的项目中使用你喜欢的Vagrant Box。你所需要的只是Vagrant Box的名称。
例如,标记的Vagrant Box被称为hashicorp/bionic64。它是一个Ubuntu 18.04 LTS Vagrant Box。

在这篇文章中,我将使用通用/ubuntu2004Vagrant Box来设置webserver。它是一个Ubuntu 20.04 LTS Vagrant Box。

你可以从搜索页面点击任何一个Vagrant Box来查看更多关于该Vagrant Box的信息。

一旦你决定使用哪个Vagrant Box,用以下命令创建一个新的Vagrantfile。
$ nano Vagrantfile

在Vagrantfile中键入以下几行代码。
Vagrant.configure("2") do |config|
config.vm.box = "generic/ubuntu2004"
config.vm.provision :shell, path: "bootstrap.sh"
config.vm.synced_folder "html/", "/var/www/html"
config.vm.network :forwarded_port, guest: 80, host: 8080
end
一旦你完成了,按**+X,然后按Y和保存Vagrant文件**。

config.vm.box 一行用于配置该项目要使用的Vagrant Box。在本例中,Vagrant Box是generic/ubuntu2004。

要启动Vagrant项目,运行以下命令。
$ vagrant up

Vagrant会从网上下载Vagrant Boxgeneric/ubuntu2004,因为你是第一次使用这个Vagrant Box。

下载可能需要一段时间才能完成,这取决于Vagrant Box镜像的大小。

一旦Vagrant Box被下载,Vagrant应该为项目创建所需的虚拟机,配置它们,并启动它们。

在这种情况下,只有1个虚拟机默认被创建。它使用的是vmware_desktop插件,而且它正在**运行,**正如你在下面的截图中看到的。

你可以通过SSH进入该虚拟机,方法如下。
$ vagrant ssh

你应该通过SSH连接到虚拟机的控制台,如下面的截图所示。

你可以在虚拟机中运行任何你想要的命令。

一旦你完成了,你可以退出SSH会话,如下所示。
$ logout

这就是你如何使用Vagrant。
现在,让我们用Vagrant设置一个简单的Web服务器。
首先,在Vagrant项目目录~/http-server中创建一个新的目录html/,方法如下。
$ mkdir HTML

在新创建的html/目录中创建一个index.html文件,如下所示。
$ nano html/index.html

在index.html文件中键入以下一行。
完成后,按**+X,然后按Y和来保存index.html**文件。

在Vagrant项目目录~/http-server中创建一个bootstrap.shshell脚本,如下所示。
$ nano bootstrap.sh

在bootstrap.sh文件中,我将键入所有我希望Vagrant在虚拟机上自动运行的命令,以设置Webserver。在Vagrant的术语中,这被称为配置。
在bootstrap.sh文件中键入以下几行代码。
#!/usr/bin/env bash
apt-get update
apt-get install -y apache2
完成后,按**+X,然后按Y和,保存bootstrap.sh**文件。

用nano文本编辑器打开Vagrantfile,如下所示。
$ nano Vagrantfile

在Vagrantfile中键入以下几行代码。
Vagrant.configure("2") do |config|
config.vm.box = "generic/ubuntu2004"
config.vm.provision :shell, path: "bootstrap.sh"
config.vm.synced_folder "html/", "/var/www/html"
config.vm.network :forwarded_port, guest: 80, host: 8080
end
一旦你完成了,按**+X,然后按Y和保存Vagrantfile文件**。

这里,config.vm.provision这行用于运行 shell脚本bootstrap.sh(你刚刚写的),以配置虚拟机。

config.vm.synced_folder这行用于将Vagrant项目目录~/http-server中的html/目录挂载到虚拟机的/var/www/html目录。
注意,/var/www/html是Apache 2网络服务器的默认webroot。

最后,config.vm.network这一行用于将虚拟机的80端口转发到你的计算机的8080端口,这样你就可以从你的计算机访问网络服务器。

为了使这些变化生效并运行配置脚本,请运行以下命令。
$ vagrant reload --provision

Vagrant会自动在虚拟机上安装Apache网络服务器,在虚拟机的**/var/www/html目录下挂载~/http-server/html目录,并将80端口转发到你电脑的8080**端口。

正如你所看到的,虚拟机**(guest**)的80端口被转发到你的计算机**(host**)的8080端口。
$ vagrant port

现在,打开一个网页浏览器,访问http://localhost:8080,你应该看到以下页面。这说明一切工作都很正常。

如果你对Vagrant文件做了任何改动(例如,改变了转发端口,添加了新的共享文件夹),如果Vagrant项目已经启动/运行,你需要运行下面的命令,使改动生效。
$ vagrant reload

如果您对配置脚本bootstrap.sh做了任何修改,您需要运行以下命令使修改生效。
$ vagrant reload --provision

如果你想暂停Vagrant项目中使用的所有虚拟机,请运行以下命令。
$ vagrant suspend

如果您想恢复Vagrant项目中使用的暂停的虚拟机,请运行以下命令。
$ vagrant resume

如果您想关闭Vagrant项目中使用的虚拟机,请运行以下命令。
$ vagrant halt

如果你已经关闭了Vagrant项目中使用的所有虚拟机,你可以用以下命令将它们全部唤醒。
$ vagrant up

如果您想永远删除Vagrant项目中使用的所有虚拟机,请运行以下命令。
$ vagrant destroy

即使您完全销毁了Vagrant项目中使用的所有虚拟机,您也可以使用下面的命令来重新创建一切。
$ vagrant up

总结
在这篇文章中,我已经向你展示了如何在Ubuntu 20.04 LTS上安装最新版本的Vagrant。我还向你展示了如何安装Vagrant VMware Utility和Vagrant VMware Desktop Provider插件,以配置Vagrant使用VMware Workstation Pro 16作为虚拟机提供者。我向你展示了一个简单的Vagrant例子,你使用Vagrant设置了一个Apache 2网络服务器。