【Linux】Vagrant搭建Linux环境

Vagrant

Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境。

安装Vagrant

Vagrant官网下载安装包,执行安装。

安装VirtualBox

从官网下载VirtualBox,执行安装,设置虚拟机的安装位置,默认会安装在C盘,避免系统盘资源占用。

注册Vagrant引导文件

box是Vagrant环境的包格式。您可以在Vagrantfile中指定一个box环境和操作配置。您可以在任何受支持的平台上使用一个box来启动相同的工作环境。为了使团队能够使用和管理相同的盒子,支持版本。
最快的入门方法是从Vagrant Cloud上的公开目录中选择一个预定义的盒子环境。您还可以在Vagrant Cloud上添加和共享您自己的定制盒子。
这里安装Centos7,可以从Vagrant Cloud中找到对应的安装步骤,
image.png
打开cmd,执行上述命令,会在C:/User/DoGH目录下创建一个vagrantfile文件,Vagrant会以该文件为引导,创建系统。

vagrant init centos/7
vagrant up

执行vagrant up自动安装并启动centos系统。

第一次需要下载系统所以较为缓慢。

等待启动完成后,可以在VirtualBox中看到该虚拟机的配置信息。
image.png
当下次需要启动虚拟机时,可以在cmd中执行vagrant up命令启动虚拟机或在VirtualBox中直接启动和关闭。

用户管理

Vagrant创建的虚拟机自带一个普通用户vagrant密码也是vagrant,在cmd中也可以通过vagrant ssh命令自动登录该用户,
在默认情况下,使用ssh连接工具访问虚拟机时需要身份文件和密码双重登录,这里可以在cmd中输入vagrant ssh-config命令,打印他的ssh连接信息,

Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/Users/DoGH/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
  PubkeyAcceptedKeyTypes +ssh-rsa
  HostKeyAlgorithms +ssh-rsa

IdentityFile就是身份文件的位置,选择该文件,在输入用户名和密码即可登录vagrant用户。
在登录了虚拟机后,切换至root用户,并设置登录密码

# 切换至root用户
sudo -i

# 设置密码
passwd

为了能直接使用用户名密码登录虚拟机,需要修改/etc/ssh/sshd_config文件,开启该两项配置。

PermitRootLogin yes
PasswordAuthentication yes

该文件需要root用户登录才能被修改。

重启ssh服务,再通过连接工具连接时就不需要身份文件的验证

sudo systemctl restart sshd

Vagrantfile

vagrantfile的主要功能就是描述项目所要求的设备类型,并且如何配置和提供这些设备。

Vagrant主要依靠每个项目的Vagrantfile文件运行,并且Vagrantfile版本管理。这就允许其他参与项目的开发人员获得Vagrantfile文件,只需要执行vagrant up,就可以创建相同的设备。Vagrantfiles可以在Vagrant支持的每个平台上移植。

Vagrantfile使用的是Ruby语言,但是修改Vagrantfile并不需要了解Ruby语言,因为它更多的是简单的变量赋值。

查找路径

当运行任意vagrant命令时,Vagrant会首先从当前目录开始,并逐级目录查找所能找到的第一个Vagrantfile。因此,如果在/home/mitchellh/projects/foo目录下运行vagrant命令,他会搜索所有的路径,直到找到第一个Vagrantfile为止。

/home/mitchellh/projects/foo/Vagrantfile
/home/mitchellh/projects/Vagrantfile
/home/mitchellh/Vagrantfile
/home/Vagrantfile
/Vagrantfile

这样就可以从项目中的任何目录运行vagrant。

您可以通过将VAGRANT_CWD环境变量设置为其他路径来更改Vagrant查找Vagrantfile的起始目录。

加载顺序和合并

要理解的一个重要概念是Vagrant如何加载Vagrant文件。Vagrant实际上会加载一系列Vagrant文件,并在运行过程中合并设置。这允许不同级别特殊性的Vagrantfiles覆盖先前的设置。
Vagrantfiles按照如下所示的顺序加载。注意,如果在任何步骤中都没有找到Vagrantfile, Vagrant将继续执行下一步。

  1. Vagrantfile包装用于指定设备的box容器。
  2. 在Vagrant根路径下的Vagrantfile文件(默认为~/.vagrant.d)。这样可以为系统用户指定一些默认值。
  3. 项目路径下的Vagrantfile文件。这个Vagrantfile将会是更多时间需要修改的。
  4. 多设备
  5. 指定的提供者

在任意层次上,之前的配置都将被相同的配置覆盖。

配置网络

Vagrant为如何将客户机连接到网络提供了多种选择,但是有一个标准的使用模式,以及所有网络配置的一些共同点,这些都很重要,需要了解。
所有网络都在Vagrantfile中使用config.vm.network方法调用进行配置。例如,下面的Vagrantfile定义了一些端口转发:

Vagrant.configure("2") do |config|
  # ...
  config.vm.network "forwarded_port", guest: 80, host: 8080
end

这里固定虚拟机的IP地址,如下

Vagrant.configure("2") do |config|
  config.vm.network "public_network", ip: "192.168.56.10"
end

这里IP的规划要与本机的Virtual虚拟网卡地址在统一网段。
image.png
保存Vagrantfile,重启虚拟机(vagrant reload),虚拟机的网络配置就已发生了改变。

多设备运行

Vagrant支持在Vagrantfile中定义多个设备,在以下场景中可以应用到

  • 准确地建模多服务器生产拓扑,例如分离web服务器和数据库服务器。
  • 建模一个分布式系统,以及它们如何相互作用。
  • 测试一个接口,比如服务组件的API。
  • 容灾测试:机器宕机、网络分区、网络延迟等特殊情况。

定义多个设备

多个设备都可以在Vagrantfile文件中通过config.vm.define来定义。这个配置会在Vagrant中再创建一个配置,例如:

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Hello"

  config.vm.define "web" do |web|
    web.vm.box = "apache"
  end

  config.vm.define "db" do |db|
    db.vm.box = "mysql"
  end
end

正如你所见,config.vm.define重新定义了一个区域作为另一个变量。这个变量,例如web,与config变量完全相同,只是在变量中的任意配置都只适用于当前定义的设备。因此,web中的任意配置只影响web这台设备。
并且更重要的是,你还可以继续同样地使用config对象。配置对象会在设备独有的配置之前进行加载和合并。
如果您熟悉编程,这与语言具有不同的变量作用域类似。
在使用这些作用域时,诸如提供程序之类的事情的执行顺序变得很重要。Vagrant强制按照Vagrantfile中列出的顺序,从外到内进行排序。例如,下面的Vagrantfile:

Vagrant.configure("2") do |config|
  config.vm.provision :shell, inline: "echo A"

  config.vm.define :testing do |test|
    test.vm.provision :shell, inline: "echo B"
  end

  config.vm.provision :shell, inline: "echo C"
end

在这种情况下,提供程序将输出“A”,然后是“C”,然后是“B”。注意“B”是最后一个。这是因为按照文件的顺序,排序是由外到内的。

控制多设备

一旦在一个Vagrantfile中定义了不止一台机器,各种Vagrantfile命令的用法就会略有变化。这种变化应该主要是直观的。
只对单个机器有意义的命令,比如vagrant ssh,现在需要控制机器的名称。使用上面的例子,您可以说vagrant ssh webvagrant ssh db
其他命令,如vagrant up,默认情况下在每台机器上运行。所以如果运行vagrant, vagrant会同时打开web和DB机器。你也可以选择是具体的,例如vagrant up webvagrant up db
另外,Vagrant可以指定一个正则表达式来只匹配某些机器。在拥有许多类似机器的某些情况下很有用,例如,如果正在测试分布式服务,可能有一个leader机器以及follower0, follower1, follower2等。如果想要启动所有的备机而不是主机,可以执行vagrant up /follower[0-9]/命令。如果Vagrant在正斜杠中看到机器名,则假定正在使用正则表达式。

指定主机

Vagrant也可以指定一个主机。当在多设备环境中没有指定设备作为主机时,那么主机将作为默认设备被使用。指定默认主机,只需要在定义时设置为主设备。并且只能指定一台设备作为主机。

config.vm.define "web", primary: true do |web|
  # ...
end

设备的自动启动

在默认情况下的多设备环境中,vagrant up会启动所有的已定义的设备。autostart设置可以告诉Vagrant哪些设备是不需要自动启动的。例如:

config.vm.define "web"
config.vm.define "db"
config.vm.define "db_follower", autostart: false

当依照该设置运行vagrant up时,Vagrant会自动启动webdb设备,但并不会自动启动db_follower设备。如果要启动db_follower设备,可以通过执行vagrant up db_follower命令启动。

参考:https://developer.hashicorp.com/vagrant/docs

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值