vagrant虚拟机
Vagrant是一种工具,提供了一个简单易用的命令行客户端来管理虚拟环境。 我开始使用它是因为它使我更容易开发网站,测试解决方案和学习新知识。
根据Vagrant的网站 ,“ Vagrant缩短了开发环境的建立时间,提高了生产平价,并使“在我的机器上工作”成为过去的遗物。”
Vagrant可以做很多事情,您可以在Opensource.com的Vagrant开源资源文章中了解更多背景知识。
在此入门指南中,我将演示如何使用Vagrant:
- 创建和配置VirtualBox虚拟机(VM)
- 运行部署后配置外壳脚本和应用程序
听起来很简单,确实如此。 Vagrant的强大之处在于,无论平台或操作系统如何,都具有一致的工作流来部署和配置计算机。
首先,将VirtualBox用作提供程序 ,设置一个Ubuntu 16.04 框 ,并应用一些shell命令作为配置程序 。 我将物理机(例如,笔记本电脑或台式机)称为主机,将Vagrant VM称为guest虚拟机。
在本教程中,我们将整理一个Vagrantfile并提供定期检查点以确保我们的文件看起来相同。 我们将介绍以下入门和高级主题:
介绍性主题:
- 安装无业游民
- 选择一个无家可归的盒子
- 了解Vagrantfile
- 使虚拟机运行
- 使用预配器
高级主题:
- 联网
- 同步文件夹
- 部署多台机器
- 确保一切正常
看起来很多,但是一旦完成,它们就会很好地融合在一起。
安装无业游民
首先,我们将导航到Vagrant和VirtualBox的下载页面以安装每个版本的最新版本。
我们可以输入以下命令,以确保已安装最新版本的应用程序并可以使用。
流浪汉:
# 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虚拟机