前言
日常开发过程中,为了保证开发环境的统一并且又不想污染我们本机的环境,通常我们有 2 种方式可以做到,一种是状态火热的docker虚拟化技术,另一种就是我们经久不衰的虚拟机了。本文介绍在 Mac 下使用 Vagrant 快速搭建Centos7 虚拟机。1. 什么是 Vagrant
1.1. Vagrant 简介
什么是 Vagrant,要回答这个问题,最好的答案应该来自官网(https://www.vagrantup.com/intro/index.html)
Vagrant is a tool for building and managing virtual machine environments in a single workflow. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases production parity, and makes the “works on my machine” excuse a relic of the past.
翻译:Vagrant 是一个在单个工作流中实现构建和管理虚拟机环境的工具。通过一种简单易用的工作流并专注于自动化,Vagrant 减少了开发环境的配置时间,提高了生产效率,也正因为 Vagrant 的存在,使得『这个在我的电脑可以运行』这种借口成为过去。
官网的简介,我们简单的总结一下:Vagrant 是一个可以快速构建并管理虚拟机的工具
。
1.2. Vagrant 优势
- 配置简单,避免相同环境重复配置,仅需共享一个
Vagrantfile
即可快速搭建一个相同配置的虚拟机。 - 一处配置,多端运行,不受系统环境影响,
Linux / Mac OS X / Windows
启用命令一致。 - 安装简单,卸载干净。安装虚拟机,只会在当前
Vagrantfile
目录生成少数的缓存文件,卸载时可以卸载的干干净净,丝毫不污染宿主机环境。 - 支持多种
provider
,便于用户自行选择 provider 去挂载虚拟机,包括:VirtualBox
,VMware
,AWS
,Docker
等。
2. 安装 Vagrant
2.1. 环境准备
安装 provider,主要用于挂载虚拟机。本文将采用开源免费的 VirtualBox
作为 Vagrant 的 provider 来挂载我们的虚拟机。VirtualBox
是一款开源免费的虚拟机软件,相比 VMware
体系的软件来说,更加 小巧(主要是 免费)。
下载地址:https://www.virtualbox.org/wiki/Downloads
笔者使用的 VirtualBox
版本是 6.0.6 。
安装方式是傻瓜式安装,只需要选择好对应系统的版本,下一步操作即可。
2.2. 安装 Vagrant
主角登场,接下来我们来安装 Vagrant
。
下载地址:https://www.vagrantup.com/downloads.html
笔者使用的 Vagrant
版本是 2.2.4 。
安装方式和 VirtualBox 一样,同样是傻瓜式安装,只需要选择好对应系统的版本,下一步操作即可。
安装完成之后,前往 Terminal 执行命令验证是否安装成功:
1 | $ vagrant version |
3. Vagrant 命令
1 | vagrant init <名称> # 初始化box的操作 |
4. Vagrant 实战
本小节我们完成一个实战,使用 Vagrant 安装 centos7。
4.1. 寻找box
box 就是我们系统的初始化镜像,我们可以在 http://www.vagrantbox.es/ 找到我们需要的系统镜像
建议大家去给这个仓库点个 Star,方便好用的东西永远值得表扬! 附上仓库链接:https://github.com/garethr/vagrantboxes-heroku 。
理论上这里能搜到的 box,都可以在下面的初始化中直接使用 init
命令直接初始化。(但是国内的网络会导致经常失败。)
因此我们可以拷贝上面的 box 链接,先单独下载,再进行安装。
假设我们的 box 下载地址为:/Users/yangkai.shen/Downloads/vagrant-images/CentOS-7-x86_64-Vagrant-1803_01.VirtualBox.box
打开 Terminal,输入如下命令:
1 | vagrant box add centos/7 /Users/yangkai.shen/Downloads/vagrant-images/CentOS-7-x86_64-Vagrant-1803_01.VirtualBox.box |
这样,我们就可以使用我们添加的 box 进行初始化了。
4.2. 初始化
我们创建一个目录 centos7
,然后在 Terminal 中进入该目录,然后执行初始化命令。
1 | vagrant init centos/7 |
此时会发现 centos7
目录下已经创建了一个 Vagrantfile
,里面已经包含了默认的配置。
4.3. 安装 / 启动
在 Terminal 中输入如下命令,即可进行自动安装虚拟机:
1 | vagrant up |
等待几分钟,即可安装成功。
4.4. 登录
在 Terminal 中执行如下命令:
1 | vagrant ssh |
就会登录到虚拟机的 bash 中,非常方便。
这里需要注意,windows用户直接使用cmd命令不能使用ssh,建议使用 git-bash.exe 进行操作
5. Vagrant 高阶操作
5.1. 共享宿主机文件夹
实现共享文件夹,首先我们必须先安装一个 Vagrant 插件:vagrant-vbguest
,打开 Terminal 输入以下命令安装:
1 | vagrant plugin install vagrant-vbguest |
安装成功后,我们只需要在 Vagrantfile
中配置共享文件夹,参考如下:
1 | # 第一个参数是宿主机文件夹地址 |
5.2. 网络代理配置
这里我们总共有 3 个步骤实现网络代理:
5.2.1. 安装插件
实现网络代理,首先我们必须先安装一个 Vagrant 插件:vagrant-proxyconf
,打开 Terminal 输入以下命令安装:
1 | vagrant plugin install vagrant-proxyconf |
5.2.2. 配置宿主机固定 IP
注意:这里我们是对 VirtualBox 全局设置,前往不要仅对某一台虚拟机设置了,这样的好处是所有的虚拟机都会绑定上我们配置的网卡信息。
安装成功后,我们还需要拿到宿主机的一个固定 IP,显然这个 IP 需要在我们切换网络环境的时候,仍然保证固定不变。此时我们可以通过 VirtualBox
自带的一个小技巧实现~
打开 VirtualBox,找到左上角 『工具』右侧的小图标,点击该图标,选择『网络』,可以看到如下界面:
可以看到网卡列表里存在网卡信息,如果不存在,可以自己手动创建。这里网卡信息里的必须选择『手动配置网卡』。我们可以从虚拟机中访问宿主机的固定IP就是这里的IPv4地址。
5.2.3. 配置 Vagrantfile
最后,我们需要在 Vagrantfile
中配置代理,参考如下:
1 | if Vagrant.has_plugin?("vagrant-proxyconf") |
这样启动虚拟机之后,我们的网络请求都会通过我们宿主机的 1087 端口代理出去。
5.3. 安装后系统环境配置
Vagrant 可以在虚拟机安装之后,使用 shell 命令对系统环境做一些初始化配置,我们可以在 Vagrantfile
中配置。
Vagrant 支持 2 种方式执行 shell,第一种方式是直接在 Vagrantfile 中写 shell 命令,如下:
1 | config.vm.provision "shell", privileged: true, inline: <<-SHELL |
第二种方式,支持引用外部 shell 脚本,如下:
1 | config.vm.provision "shell", privileged: true, path: "./setup.sh" |
5.4. 如何配置聚群化环境
5.4.1. 设置硬件参数
设置虚拟机内存大小和CPU核数,在 Vagrantfile
中配置如下信息即可:
1 | config.vm.provider "virtualbox" do |v| |
5.4.2. 设置hostname
在 Vagrantfile
中配置如下信息即可:
1 | config.vm.hostname = "master1" |
5.4.3. 设置静态IP
在 Vagrantfile
中配置如下信息即可:
1 | config.vm.network "private_network", ip: "192.168.205.10" |
5.5. 可用插件
从上面的 共享宿主机文件夹
、网络代理
等高阶操作,我们可以发现,Vagrant 拥有丰富的插件可以帮助我们完成很多个性化需求,对于这些插件,官方提供了一个地址,专门整理了大量的 Vagrant 插件。
插件列表地址:https://github.com/hashicorp/vagrant/wiki/Available-Vagrant-Plugins
6. Vagrantfile 案例
本小节,我们展示一个
Vagrantfile
启动 3 台虚拟机节点,设置好硬件信息、安装docker、并设置开机启动,同时开启代理配置。
Vagrantfile
1 | # -*- mode: ruby -*- |
setup.sh
1 | #/bin/sh |
参考
- Mac下使用Vagrant配置CentOS虚拟环境
- Vagrant 笔记
- 使用vagrant和vitrualBox搭建虚拟开发环境
- Vagrant搭建虚拟化开发环境