vagrant虚拟机_使用Vagrant管理虚拟环境

vagrant虚拟机

Vagrant是一种工具,提供了一个简单易用的命令行客户端来管理虚拟环境。 我开始使用它是因为它使我更容易开发网站,测试解决方案和学习新知识。

根据Vagrant的网站 ,“ Vagrant缩短了开发环境的建立时间,提高了生产平价,并使“在我的机器上工作”成为过去的遗物。”

Vagrant可以做很多事情,您可以在Opensource.com的Vagrant开源资源文章中了解更多背景知识。

在此入门指南中,我将演示如何使用Vagrant:

  1. 创建和配置VirtualBox虚拟机(VM)
  2. 运行部署后配置外壳脚本和应用程序

听起来很简单,确实如此。 Vagrant的强大之处在于,无论平台或操作系统如何,都具有一致的工作流来部署和配置计算机。

首先,将VirtualBox用作提供程序 ,设置一个Ubuntu 16.04 ,并应用一些shell命令作为配置程序 。 我将物理机(例如,笔记本电脑或台式机)称为主机,将Vagrant VM称为guest虚拟机。

在本教程中,我们将整理一个Vagrantfile并提供定期检查点以确保我们的文件看起来相同。 我们将介绍以下入门和高级主题:

介绍性主题:

  • 安装无业游民
  • 选择一个无家可归的盒子
  • 了解Vagrantfile
  • 使虚拟机运行
  • 使用预配器

高级主题:

  • 联网
  • 同步文件夹
  • 部署多台机器
  • 确保一切正常

看起来很多,但是一旦完成,它们就会很好地融合在一起。

安装无业游民

首先,我们将导航到VagrantVirtualBox的下载页面以安装每个版本的最新版本。

我们可以输入以下命令,以确保已安装最新版本的应用程序并可以使用。

流浪汉:


   
   
# vagrant --version
Vagrant 2.0.3

VirtualBox:


   
   
# VBoxManage --version
5.2.8r121009

选择一个无家可归的盒子

选择“无家可归”框类似于为服务器选择图像。 在基础级别上,我们选择要使用的操作系统(OS)。 某些包装盒会更进一步,并且已经安装了其他软件(例如Puppet或Chef客户端)。

盒装在线存储库是Vagrant Cloud ; 它为多家提供商提供了无所不能的无业游民盒子。 在本教程中,我们将使用Ubuntu Xenial Xerus 16.04 LTS每日构建。

了解Vagrantfile

将Vagrantfile视为环境的配置文件。 它描述了有关如何构建和配置VirtualBox VM的Vagrant环境。

我们需要创建一个空的项目目录进行工作,然后使用以下命令从该目录初始化Vagrant环境:


   
   
# vagrant init ubuntu/xenial64

这只会创建Vagrantfile; 它不会弹出“流浪者”盒子。

Vagrantfile的文档齐全,其中包含许多有关如何使用它的指南。 我们可以使用--minimal标志生成最小化的--minimal


   
   
# vagrant init --minimal ubuntu/xenial64

生成的文件将如下所示:


   
   
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
end

稍后我们将更多地讨论Vagrantfile,但现在让我们启动并运行该框。

使虚拟机运行

让我们从项目目录中发出以下命令:

 # vagrant up 

第一次执行vagrant up需要花费一些时间,因为它将盒子下载到您的计算机上。 在以后的运行中它要快得多,因为它会重复使用相同的下载框。

虚拟机启动并运行后,我们可以通过在项目目录中发出以下命令,将ssh放入单台计算机中:


   
   
# vagrant ssh

而已! 从这里我们应该能够登录到我们的VM并开始使用它。

使用预配器

在继续之前,让我们回顾一下。 到目前为止,我们已经选择了一个图像并使服务器运行。 在大多数情况下,服务器未配置,并且没有我们可能需要的任何软件。

预配器提供了一种在部署后使用Ansible,Puppet,Chef甚至Shell脚本等工具来配置服务器的方法。

在默认的Vagrantfile中可以找到使用Shell Provisioner的示例。 在此示例中,我们将运行命令以更新apt并将Apache2安装到服务器。


   
   
   config.vm.provision "shell", inline: <<-SHELL
     apt-get update
     apt-get install -y apache2
   SHELL

如果我们要使用Ansible剧本,则配置部分如下所示:


   
   
config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbook.yml"
end

一件整洁的事情是,我们只能通过发出provision子命令来运行Vagrantfile的Provisioning部分。 这对于测试脚本或配置管理过程非常有用,而不必每次都重新构建VM。

Vagrantfile检查点

我们最小的Vagrantfile应该如下所示:


   
   
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
   config.vm.provision "shell", inline: <<-SHELL
     apt-get update
     apt-get install -y apache2
   SHELL
end

添加配置部分后,我们需要运行此配置子命令:


   
   
# vagrant provision

接下来,我们将继续在我们的Vagrantfile上进行构建,涉及一些更高级的主题,从而为希望进一步研究的人们奠定基础。

联网

在本节中,我们将在VirtualBox的vboxnet0网络上添加一个附加IP地址。 这将使我们能够通过192.168.33.0/24网络访问计算机。

将以下行添加到Vagrantfile中,会将计算机配置为在192.168.33.0/24网络上具有其他IP。 此行在默认的Vagrantfile中也用作示例。


   
   
config.vm.network "private_network", ip: "192.168.33.10

Vagrantfile检查点

对于接下来的人,这里是我们工作的Vagrantfile所在的位置:


   
   
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
   config.vm.network "private_network", ip: "192.168.33.10"
   config.vm.provision "shell", inline: <<-SHELL
     apt-get update
     apt-get install -y apache2
   SHELL
end

接下来,我们需要重新加载配置,以使用此新接口和IP重新配置计算机。 此命令将关闭VM,使用新的IP地址重新配置Virtual Box VM,然后重新启动VM。


   
   
# vagrant reload

备份后,我们的机器应具有两个IP地址。

同步文件夹

同步的文件夹使我开始使用Vagrant。 他们允许我使用我的工具在主机上工作,同时使文件可用于Web服务器或应用程序。 它使我的工作流程更加轻松。

默认情况下,主机上的项目目录作为/home/vagrant挂载到客户机上。 一开始它对我有用,但最终,我想自定义此目录的安装位置。

在我们的示例中,我们定义了项目目录中HTML目录应该以具有root用户/组所有权的/var/www/html挂载。


   
   
config.vm.synced_folder "./html", "/var/www/html",
 owner: "root", group: "root"

需要注意的一件事:如果您使用同步文件夹作为Web服务器文档根目录,则需要禁用sendfile ,否则可能会遇到文件未更新的问题。

更新Web服务器的配置不在本文讨论范围之内,但是这里是您要更新的指令。

在Apache中:


   
   
EnableSendFile Off

在Nginx中:


   
   
sendfile off;

Vagrantfile检查点

添加我们的同步文件夹配置后,我们的Vagrantfile将如下所示:


   
   
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
   config.vm.network "private_network", ip: "192.168.33.10"
   config.vm.synced_folder "./html, "/var/www/html",
      owner: "root", group: "root"
   config.vm.provision "shell", inline: <<-SHELL
     apt-get update
     apt-get install -y apache2
   SHELL
end

我们需要重新加载机器以使新配置生效。


   
   
# vagrant reload

部署多台机器

有时我们将项目目录称为“环境”,而一台计算机并不是一个环境。 最后一部分扩展了我们的Vagrantfile,以部署两台计算机。

要创建两台计算机,我们需要在vm.define块内包含一台计算机的定义。 其余配置完全相同。

这是define块中服务器定义的示例。


   
   
Vagrant.configure("2") do |config|

config.vm.define "web" do |web|
    web.vm.box = "web"
    web.vm.box = "ubuntu/xenial64"
     web.vm.network "private_network", ip: "192.168.33.10"
     web.vm.synced_folder "./html", "/var/www/html",
        owner: "root", group: "root"
     web.vm.provision "shell", inline: <<-SHELL
       apt-get update
       apt-get install -y apache2
     SHELL
  end

end

请注意,在define块中,我们的变量称为"web" ,并且在该块中带有该变量以引用每种配置方法。 我们稍后将使用相同的名称进行访问。

在下一个示例中,我们将在配置中添加第二台名为"db"计算机。 之前在第二个块中使用"web" ,我们将使用"db"来引用第二个计算机。 我们还将在private_network上更新IP地址,以便我们可以在机器之间进行通信。


   
   
Vagrant.configure("2") do |config|

config.vm.define "web" do |web|
    web.vm.box = "web"
    web.vm.box = "ubuntu/xenial64"
     web.vm.network "private_network", ip: "192.168.33.10"
     web.vm.synced_folder "./html", "/var/www/html",
        owner: "root", group: "root"
     web.vm.provision "shell", inline: <<-SHELL
       apt-get update
       apt-get install -y apache2
     SHELL
  end

  config.vm.define "db" do |db|
      db.vm.box = "db"
      db.vm.box = "ubuntu/xenial64"
       db.vm.network "private_network", ip: "192.168.33.20"
       db.vm.synced_folder "./html", "/var/www/html",
          owner: "root", group: "root"
       db.vm.provision "shell", inline: <<-SHELL
         apt-get update
         apt-get install -y apache2
       SHELL
    end

end

完成的Vagrantfile检查点

在最终的Vagrantfile文件中,我们将安装MySQL服务器,更新IP地址,并从第​​二台计算机上删除已同步文件夹的配置。


   
   
Vagrant.configure("2") do |config|

config.vm.define "web" do |web|
    web.vm.box = "web"
    web.vm.box = "ubuntu/xenial64"
     web.vm.network "private_network", ip: "192.168.33.10"
     web.vm.synced_folder "./html", "/var/www/html",
        owner: "root", group: "root"
     web.vm.provision "shell", inline: <<-SHELL
       apt-get update
       apt-get install -y apache2
     SHELL
  end

  config.vm.define "db" do |db|
      db.vm.box = "db"
      db.vm.box = "ubuntu/xenial64"
       db.vm.network "private_network", ip: "192.168.33.20"
       db.vm.provision "shell", inline: <<-SHELL
         export DEBIAN_FRONTEND="noninteractive"
         apt-get update
         apt-get install -y mysql-server
       SHELL
    end

end

确保一切正常

现在我们有一个完整的Vagrantfile。 让我们再引入一个Vagrant命令以确保一切正常。

让我们销毁我们的机器,然后重新制造它。

以下命令将删除我们之前的Vagrant图像,但保留我们先前下载的框。


   
   
# vagrant destroy --force

现在我们需要恢复环境。


   
   
# vagrant up

我们可以使用vagrant ssh命令ssh进入机器:


   
   
# vagrant ssh web

要么


   
   
# vagrant ssh db

您应该有一个可以使用的Vagrantfile,可以对其进行扩展,并作为了解更多内容的基础。 Vagrant是测试,开发和学习新事物的强大工具。 我鼓励您继续添加它并探索它提供的选项。

翻译自: https://opensource.com/article/18/4/vagrant-guide-get-started

vagrant虚拟机

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值