📜  什么是流浪者?

📅  最后修改于: 2022-05-13 01:58:43.447000             🧑  作者: Mango

什么是流浪者?

流浪汉 是一个开源工具,可帮助我们自动创建和管理虚拟机。简而言之,我们可以在一个简单的配置文件中指定虚拟机的配置,而 Vagrant 只需一个简单的命令即可创建相同的虚拟机。它提供命令行界面来自动执行此类任务。

虚拟机是一种物理上不存在但可以像物理计算机一样使用的机器。任何可以在物理机上完成的任务也可以在虚拟机上执行。但是虚拟机是建立在物理系统之上的,在一台物理计算机上可以创建多个虚拟机。所有虚拟机共享相同的硬件,但每个虚拟机可能有一个单独的操作系统。托管所有虚拟机的物理系统称为主机。将主机计算机硬件和虚拟环境分开的介质称为HypervisorHyper-V

虚拟机的结构

图:虚拟机结构

每个虚拟机都应该有自己的配置,如操作系统、CPU、RAM、硬盘内存、网络等。创建这样的虚拟机,手动配置所有属性确实是一项繁重的任务。在这种情况下,Vagrant 出现了。

为什么是流浪者?
一个应用程序由几个组件组成,这些组件需要正确配置才能运行该应用程序。例如,现代 Web 应用程序可能具有Java、JavaScript、 Python等组件作为语言,MySQL、Oracle、MongoDB 等作为数据库,其他组件如 Web 服务器、负载平衡器、API 网关、消息队列等. 根据要求。

在 Vagrant 之前,所有这些组件都需要手动设置。在设置过程中,面临很多问题-

  • 在每台机器上,都需要单独进行设置,这需要花费大量时间。
  • 手动配置可能有误,每次都需要调试修复。
  • 开发、测试和生产环境应该相同。但是由于这种手动安装和设置组件,可能会有细微的差异,这给我们带来了很多痛苦,因为在这种情况下,应用程序可能在开发环境中运行,但在生产环境中会遇到问题。

Vagrant 是所有这些问题的现代解决方案。 Vagrant 不是手动设置所有组件,而是为我们提供了使用一个配置文件(称为 Vagrantfile)的功能,其中指定了所有必需的软件组件及其配置信息。因此,当相同的配置文件在多台机器上执行时,Vagrant 在每台物理机之上创建虚拟机,自动安装和设置所有提到的组件,并提供一个准备好开始工作的虚拟机。由于这提供了一个虚拟机,因此无需担心一个软件组件将在 Windows 操作系统或 Linux 操作系统上运行,以及它们的配置和开发人员应该是什么,QA 都在单独的机器上工作,但两台机器都应该有完全相同的设置。

Vagrant 的术语:在详细介绍安装和如何使用 Vagrant 之前,让我们先讨论一下与 Vagrant 相关的基本术语。

1、Vagrant Box: Vagrant设置的基本单位是Vagrant Box。就像 Docker Image 一样,Vagrant Box 是一个独立的操作系统镜像。更具体地说,它是一个打包的虚拟机。无需手动在 VM 中安装操作系统和所有软件组件,

  • vagrant box 是一个现成的虚拟机环境基础镜像。
  • 例如,如果需要获取一些具有 Spring Boot 应用程序开发的所有默认设置的 VM,则可以获取相同的 Vagrant Box。所需要做的就是下载 Vagrant Box 并运行它。 Vagrant 创建了 VM,开发工作可以立即开始。
  • Vagrant Cloud box 目录中有很多 Vagrant Box,我们可以将其用作我们自己的虚拟机的基础镜像。

2. Vagrant 文件: Vagrant 维护一个配置文件,称为Vagrantfile ,其中提到了 VM 的所有配置。 Vagrant 使用文件中提到的相同配置创建虚拟机。即使需要在VM中安装一些软件,也可以在Vagrantfile中指定,Vagrant会为我们下载安装。  

让我们看看使用 Vagrant 配置一个 VM 的步骤。

安装

第一步:根据你的操作系统下载Vagrant 并安装到系统中。
第 2 步:在命令提示符下使用命令vagrant -v验证 vagrant 安装。它将显示我们安装的 vagrant 的版本,如下所示。

验证 vagrant

第三步:根据你的操作系统下载Virtual Box并安装到系统中。

Vagrant 项目设置

第 1 步:创建一个文件夹,我们要在其中保存所有与 Vagrant 相关的文件。
第 2 步:创建一个名为Vagrantfile的文件,用于提及 VM 的配置。由于这是安装后第一次使用 Vagrant,所以建议让 Vagrant 以最低配置为我们创建文件。并且可以稍后进行修改。
第 3 步:打开 PowerShell(适用于 Windows)或 Terminal(适用于 Linux)并转到第 1 步中创建的文件夹的位置。
第四步:运行命令vagrant init bento/ubuntu-16.04 ,让执行完成。
此命令将使用指定的 Vagrant Box (bento/ubuntu-16.04) 初始化目录。我们会发现在这个位置创建的 Vagrantfile。如果打开,您将看到一些示例配置已经通过适当的示例进行了提及,并且所有这些配置都被注释了。任何人都可以查看它以构建具有更具体配置的虚拟机。可以看到文件中提到的一条重要信息。

config.vm.box = "bento/ubuntu-16.04"

这是初始化时提到的 Vagrant Box。

使用 Vagrant 启动虚拟机:

vagrant up

此命令将采用 Vagrantfile 并为一个虚拟机提供所有提到的配置。目前,它使用 Ubuntu-16.04 版本的操作系统启动虚拟机。

SSH 进入虚拟机

第 1 步:现在,VM 已创建。因此,要进入它,请运行命令vagrant ssh 。执行此命令后,您现在位于新创建的 VM 中。现在,任何事情都可以通过这个终端在虚拟机内部完成。以下屏幕将可见-

流浪者 ssh

第 2 步:要从虚拟机注销,请运行命令logout 。终端将再次回到主机。

登出

清理流浪者:

第 1 步:要使用 Vagrant 关闭 VM,请运行命令vagrant halt 。该命令将关闭虚拟机并再次启动虚拟机,运行vagrant up命令。

流浪停止

第 2 步:为了关闭虚拟机,保持其当前状态,运行vagrant suspend。在这种情况下,当使用vagrant up再次启动 VM 时,系统将从上次停止的位置开始。所有未保存的工作都可以恢复。
但是在这种情况下,VM 不会从 Host Machine 释放资源,即使它需要更多的磁盘空间来存储它自己的 RAM 的当前状态在 Host Machine 内。

流浪者暂停

第 3 步:要删除 VM 及其所有资源,请运行vagrant destroy 。此命令将关闭 VM 并将其从主机系统中删除。

流浪破坏

使用 Vagrant 在 VM 中设置示例项目:

让我们在 VM 中安装一个 Web 服务器并从您的主机访问它。请按照以下步骤操作 -

第 1 步:执行vagrant ssh,进入创建的虚拟机。
第 2 步:在虚拟机内部,手动安装一个 Web 服务器,比如 Nginx。运行以下命令-

sudo apt update
sudo apt install nginx

第三步:检查 Nginx 服务是否正在运行 命令-

systemctl status nginx

检查 Nginx 服务

如果服务未运行,请使用以下命令启动服务 -

sudo service nginx start

注意 - 上述安装也可以使用Vagrantfile完成,但现在,让我们使用vagrant ssh功能。

第 4 步:转到/var/www/html并创建一个示例 HTML 文件,例如index1.html ,如下所示 -

HTML


  
    

Welcome to GeeksforGeeks

    


第 5 步:现在 Nginx 在 VM 内的默认端口 80 中运行。但是要从主机访问虚拟机的 Nginx 服务器,需要将虚拟机的 80 端口映射到主机中的某个端口。这种映射称为端口转发。可以使用 Virtual Box Manager 手动完成端口转发。但是由于这里使用的是 Vagrant,让我们使用 Vagrantfile 来完成。
第 6 步:打开 Vagrantfile 并添加该行

config.vm.network "forwarded_port", guest: 80, host: 85 

行后

config.vm.box = "bento/ubuntu-16.04" 

并保存文件。

这里基本上VM的80端口与主机系统的85端口映射。
第 7 步:在 PowerShell 或终端中退出虚拟机并运行命令vagrant reload以重新加载我们在 Vagrantfile 中添加的新设置。在重新加载期间,可以看到转发端口如下。在下面的快照中,第一个转发端口是最近添加的端口,第二个是 SSH 连接的默认端口。

流浪者重新加载

第 8 步:检查 Nginx 是否正在运行。现在可以使用主机系统的 85 端口访问 VM 的 Nginx 服务器。可以使用URL-localhost:85/index1.html检索上面创建的 HTML 文件

流浪者的优点:

  • Vagrant 是免费和开源的。
  • 它提供了开发/测试环境的极其高效的项目脚手架。
  • Vagrant 有各种各样的社区盒子和插件。

流浪者的缺点:

  • 语法更新对插件兼容性有重大影响
  • 社区支持很好,但这是一个漫长的过程。
  • 主要更新在开发项目中引入了一些严重的错误。