vagrant 起航

前言

Vagrant是一款用于构建及配置虚拟开发环境的软件,基于Ruby,主要以命令行的方式运行。主要使用Oracle的开源VirtualBox虚拟化系统, 可以实行快速虚拟开发环境的构建。Vagrant 通过使用 Boxs 和 Vagrantfiel 来创建和管理完整的可移植开发环境。

1. 安装 Vagrant

我们将使用 VirtualBox 搭建虚拟开发环境。首先,请确保您的开发计算机已 安装VirtualBox 并且安装好 Extension Pack 扩展包。之后, 下载并安装适用于您的OS的Vagrant软件包

2. 构建第一个虚拟环境

  • 建立 centos7 的 Vagrantfile 配置(第3节会详细讲解 Vagrantfile
vagrant init centos/7

  • 建立虚拟机器并开启机器
vagrant up

注意:以上 vagrant up 命令还将触发 Vagrant centos/7 通过指定的URL下载该box。Vagrant仅在检测到您的系统上不存在该box时才这样做。

我们还可以使用以下命令操作您的虚拟环境

// 关闭机器
vagrant halt 
// 重启机器
vagrant reload
// SSH 远端连接
vagrant ssh
// 移除虚拟机器
vagrant destroy

3. Vagrantfile 配置

因为 Vagrant 使用 "Provisioners" 和 "Providers" 作为开发环境的构建模块,而Vagrantfile是记录Providers和Provisioners的相关信息。
Providers作为服务,帮助vagrant使用Boxes建立和创建虚拟环境。Vagrant提供的内嵌的Provider有 VirtualBox、Hyper-V、Docker、VMware,而AWS以插件形式提供支持。
当使用VirtualBox等Provider,需要使用Boxes才能创建虚拟环境。当使用Docker作为Provider时,则不需要Boxes。
虚拟环境被创建后,开发者可以使用Provisioners自动化地自定义该虚拟环境。

Vagrantfiles 的语法是 Ruby,但是对 Vagrantfile 修改并不需要我们去了解 Ruby 编程语言,因为只是对它进行简单的变量分配。

3.1 vagrant 如何加载 Vagrantfile

我们要了解一个重要概念是 Vagrant 如何加载 Vagrantfile 。Vagrant 实际上会加载很多个 Vagrantfile,并合并设置。所以就有了加载顺序。

  1. 首先加载的是 vagrant package 打包的 box 中的 vagrantfile。
  2. 下一步加载 Vagrant 主目录下的 Vagrantfile (默认为 Users\~\.vagrant.d )。
  3. 然后加载项目目录中的 Vagrantfile。
  4. 加载 config.vm.define 中的配置,您配置的多机器环境中的配置

对于大多数的设置,新的设置会覆盖旧的设置。但是,对于定义网络之类的实际上它是彼此附加的。

3.2 Vagrantfile 常用配置

  • config.vm.hostname 计算机名称

  • config.vm.box 它的值是 Vagrant Cloud 中已安装的盒子的名称或盒子的简写名称 。

  • config.vm.network
    它提供了三个网络类型,每个网络类型都对应一个标识符,例如:"public_network"。该命令也可以定义多个网络类型。

    1. 公共网络 “public_network”
      有种非常简单的配置,通过 DHCP 自动获取 IP
      config.vm.network "public_network"
      静态配置 IP
      config.vm.network "public_network", ip: "192.168.0.1"
    2. 私有网络 "private_network"
      DHCP方式
      config.vm.network "private_network", type: "dhcp"
      静态配置方式(注意分配使用专用IP地址空间的网络)
      config.vm.network "private_network", ip: "10.0.0.0"
    3. 端口转发 "forwarded_port"
      config.vm.network "forwarded_port", guest: 80, host: 8080
      guest为虚拟机端口,host为主机端口
  • config.vm.provider
    Vagrant可以配置其他程序(VirtualBox等)提供的配置,以便充分使用提供程序。

Vagrant.configure("2") do |config|
  config.vm.provider "virtualbox" do |vb|
    ...
  end
end

常用VirtualBox设置

  1. 内存 vb.memory = "2048"
  2. cpu vb.cpus = 2
  3. virtualbox显示的名称 vb.name = "api"

以下是单机环境完整的配置

Vagrant.configure("2") do |config|
    config.vm.hostname="api"
    config.vm.box = "centos/7"
    config.vm.network "public_network"

    config.vm.provider "virtualbox" do |vb|
      # 内存设置
      vb.memory = "2048"
      # cpu
      vb.cpus = 2
      # virtualbox显示的名称
      vb.name = "api"
    end
end
  • config.vm.define
    Vagrantfile可以定义和控制多台虚拟机器。通常情况下定义多机器环境,是对服务进行分离或是搭建分布式环境时候使用。
Vagrant.configure("2") do |config|

  config.vm.define "api" do |api|
    api.vm.box = "api"
  end

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

如果您在Vagrantfile中定义了多台虚拟机器,vagrant 的命令也会有些变化

  1. vagrant up 会同时启动 api 和 mysql,如果您只想启动其中某台机器也可以具体的执行 vagrant up apivagrant up mysql。只需要后面加上具体的计算机名称。
  2. vagrant ssh 具体执行 vagrant ssh apivagrant ssh mysql
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容