我承认:我是 Linux 的粉丝。虽然多年来我一直在工作站上使用 Slackware,在服务器上使用红帽企业 Linux (RHEL),但我很喜欢看到其他发行版是如何工作的。更重要的是,我真的很喜欢在其他发行版上测试我编写的应用程序和脚本,以确保可移植性。事实上,在我看来,这是 Linux 的一大优势:您可以下载一个发行版并在其上免费测试您的软件。您无法在封闭的操作系统上做到这一点,至少在不违反 EULA 或付费的情况下是做不到的,即使那样,您也经常需要注册下载几个 GB 的数据,只是为了测试一个不超过几百 MB 的应用程序。但 Linux 是开源的,因此几乎没有理由忽视至少三个或四个主要的发行版,除非设置虚拟机可能需要大量的点击,有时还需要复杂的虚拟网络。至少,在 Vagrant 改变了开发人员的虚拟机工作流程之前,这曾经是一个借口。
什么是 Vagrant
Vagrant 是一个简单的终端虚拟机管理器。它允许您轻松地从互联网上拉取一个最小的、预先构建的虚拟机,在本地运行它,并在几个步骤内 SSH 进入它。这是您设置虚拟机最快的方式。它非常适合需要测试 Web 服务器的 Web 开发人员、需要在不同发行版上测试应用程序的程序员以及喜欢了解不同发行版如何工作的爱好者。
Vagrant 本身也相对精简。它本身不是一个虚拟化框架。它只管理您的虚拟机(在 Vagrant 术语中称为“boxes”)。它可以使用 VirtualBox,或者通过插件,使用轻量级的 libvirt 项目作为后端。
什么是 libvirt
libvirt 项目是一个旨在管理虚拟化的工具包,支持 KVM、QEMU、LXC 等。您可以将其视为一种虚拟机 API,允许开发人员编写友好的应用程序,使用户可以轻松地通过 libvirt 编排虚拟化。我使用 libvirt 作为 Vagrant 的后端,因为它在多个应用程序中都很有用,包括 virt-manager 和 GNOME Boxes。
安装 Vagrant
您可以从 vagrantup.com/downloads 安装 Vagrant。有适用于基于 Debian 的系统、基于 CentOS 的系统、macOS、Windows 等的构建版本。
对于 CentOS、Fedora 或类似的系统,您会获得一个 RPM 包,您可以使用 dnf
安装它
$ sudo dnf install ./vagrant_X.Y.ZZ_x86_64.rpm
在 Debian、Linux Mint、Elementary 和类似的系统上,您会获得一个 DEB 包,您可以使用 apt
安装它
$ sudo apt install ./vagrant_X.Y.ZZ_x86_64.deb
安装 libvirt 和支持包
在 Linux 上,您的发行版可能已经安装了 libvirt,但要启用与 Vagrant 的集成,您还需要其他一些软件包。使用您的软件包管理器安装这些软件包。
在 Fedora、CentOS 和类似的系统上
$ sudo dnf install gcc libvirt \
libvirt-devel libxml2-devel \
make ruby-devel libguestfs-tools
在 Debian、Linux Mint 和类似的系统上
$ sudo apt install build-dep vagrant ruby-libvirt \
qemu libvirt-daemon-system libvirt-clients ebtables \
dnsmasq-base libxslt-dev libxml2-dev libvirt-dev \
zlib1g-dev ruby-dev libguestfs-tools
根据您的发行版,您可能需要启动 libvirt
守护程序
$ sudo systemctl start libvirtd
安装 Vagrant-libvirt 插件
在 Vagrant 中,libvirt 通过插件启用。Vagrant 使安装插件变得容易,因此您的第一个 Vagrant 命令是您很少再次运行的命令
$ vagrant plugin install vagrant-libvirt
现在 libvirt 插件已安装,您可以开始使用虚拟机了。
设置您的 Vagrant 环境
要开始使用 Vagrant,请创建一个名为 ~/Vagrant
的目录。这是您的 Vagrantfiles
存储的位置。
$ mkdir ~/Vagrant
在此目录中,创建一个子目录来表示您要下载的发行版。例如,假设您需要一个 CentOS 测试 box。
创建一个 CentOS 目录,然后切换到它
$ mkdir ~/Vagrant/centos
$ cd ~/Vagrant/centos
现在您需要找到一个虚拟机,以便将您刚刚创建的目录转换为 Vagrant 环境。
查找 Vagrant 虚拟机
广义上讲,Vagrant boxes 来自三个不同的地方:Hashicorp(Vagrant 的维护者)、发行版的维护者以及像您和我这样的人。有些镜像是最小的,旨在作为自定义的基础。相比之下,其他镜像则试图解决特定的需求(例如,您可能会找到一个为 Web 开发准备好的 LAMP 堆栈镜像)。您可以通过浏览或搜索 boxes 的主要中心 app.vagrantup.com/boxes/search 来查找镜像。
对于此示例,搜索“centos”并找到名为 generic/centos8
的条目。单击该镜像以获取有关如何使用虚拟机的说明。说明有两种类型:
- Vagrantfile 所需的代码
- 从终端使用该 box 所需的命令
后者是更直接的方法
$ vagrant init generic/centos8
init
子命令在当前目录中创建一个名为 Vagrantfile 的配置文件,该文件将该目录转换为 Vagrant 环境。在任何时候,您都可以使用 global-status
子命令查看已知 Vagrant 环境的列表
$ vagrant global-status
id name provider state directory
-------------------------------------------
49c797f default libvirt running /home/tux/Vagrant/centos8
使用 Vagrant 启动虚拟机
运行 init
命令后,您可以使用 vagrant up
启动您的虚拟机
$ vagrant up
这将导致 Vagrant 下载虚拟机镜像(如果本地尚不存在),设置虚拟网络并配置您的 box。
进入 Vagrant 虚拟机
一旦您的虚拟机启动并运行,您可以使用 vagrant ssh
登录到它
$ vagrant ssh
box$
您连接到在您当前的 Vagrant 环境中运行的 box。登录后,您可以运行该主机的所有本机命令。这是一个运行其自身内核、具有模拟硬件和常用 Linux 软件的虚拟机。
离开 Vagrant 虚拟机
要离开您的 Vagrant 虚拟机,请注销主机,就像您正常退出 Linux 计算机一样
box$ exit
或者,您可以关闭虚拟机电源
box$ sudo poweroff
您也可以使用 vagrant
命令停止机器运行
box$ vagrant halt
销毁 Vagrant 虚拟机
完成 Vagrant 虚拟机后,您可以销毁它
$ vagrant destroy
或者,您可以使用全局 box
子命令删除虚拟机
$ vagrant box remove generic/centos8
Vagrant 很简单
Vagrant 使虚拟机变得微不足道、可丢弃且快速。当您需要一个测试环境或一个伪造的服务器来 ping 或开发,或者一个干净的实验室计算机用于实验或监控时,您可以使用 Vagrant 获得一个。有些人认为,既然容器已经接管了服务器,虚拟机就不再相关了,但虚拟机具有使其有用的独特特性。它们运行自己的内核,具有与主机完全不同的堆栈,并使用模拟硬件。当您需要虚拟机时,Vagrant 可能是获得虚拟机的最佳方式。
评论已关闭。