Vagrant 是一个基于 Ruby 的工具,可以在单个工作流程中创建和管理虚拟开发环境的工具。
Vagrant 非常适合 PHP/Python/Ruby/Java 等语言开发的应用,可以将项目通过 Vagrant 封装为 Linux 开发环境分发给他人,防止因为环境不一致导致的问题。
Vagrant 支持多种底层虚拟化技术,包括 VirtualBox 、 VMware 等。不过 VMware 为收费软件,因此对应的 Vagrant 也为收费软件,因此本文采用 VirtualBox 。
构建环境
安装 VirtualBox
添加仓库
# curl -o /etc/yum.repos.d/virtualbox.repo http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo
安装软件
# yum install VirtualBox-6.0
安装依赖
如果跳过本步,后续步骤会出现以下报错提示,因此推荐先进行安装然后再继续之后步骤。
报错
# /sbin/rcvboxdrv setup
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
This system is currently not set up to build kernel modules.
Please install the gcc make perl packages from your distribution.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
kernel-devel kernel-devel-3.10.0-957.12.1.el7.x86_64
解决
# yum -y install kernel-headers kernel-devel
报错
# /sbin/rcvboxdrv setup
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
This system is currently not set up to build kernel modules.
Please install the gcc make perl packages from your distribution.
解决
# yum -y install gcc make perl
构建内核模块
# export KERN_VER=$(uname -r)
# /sbin/rcvboxdrv setup
稍等片刻后,输出以下内容无报错提示即为成功。
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
安装 Vagrant
访问官网下载页面根据系统下载预编译包。
# curl -O https://releases.hashicorp.com/vagrant/2.2.4/vagrant_2.2.4_x86_64.rpm
安装 RPM
# yum install vagrant_2.2.4_x86_64.rpm
使用 Vagrant
添加镜像
# vagrant box add hashicorp/precise64
可看到以下提示
==> box: Loading metadata for box 'hashicorp/precise64'
box: URL: https://vagrantcloud.com/hashicorp/precise64
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.
1) hyperv
2) virtualbox
3) vmware_fusion
Enter your choice: 2
此处输入 2 回车即可。
==> box: Adding box 'hashicorp/precise64' (v1.1.0) for provider: virtualbox
box: Downloading: https://vagrantcloud.com/hashicorp/boxes/precise64/versions/1.1.0/providers/virtualbox.box
box: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com
==> box: Successfully added box 'hashicorp/precise64' (v1.1.0) for 'virtualbox'!
会自动下载沙盒镜像 Box。
创建环境
创建一个存放虚拟环境的目录
$ mkdir /home/kane/dev && cd /home/kane/dev
初始化沙盒
$ vagrant init hashicorp/precise64
启动沙盒
$ vagrant up
小贴士:执行命令后会看到一大段的提示信息,耐心等待即可。
连接沙盒
$ vagrant ssh
小贴士:连接至虚拟环境后即可开始配置环境,部署项目等操作。需要注意的是 宿主机的初始化目录会被映射为沙盒内的 /vagrant
。
配置相关
Vagrant 初始化后会在目录中生成一个名为 Vagrantfile 的配置文件。
- 开启本地访问取消下面的注释保存重启沙盒即可
# config.vm.network "private_network", ip: "192.168.33.10"
小贴士:更多参数请参照配置文件,配置文件中都有详细的说明(英文)。
预置参数
Vagrant 提供一个集成化预安装功能,可以在初始化沙盒时自动执行用户指定的命令。便于快速生成环境。
打开配置文件 Vagrantfile ,移动至最后可以看到大段被注释的代码。
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y apache2
SHELL
根据需求进行修改即可,在初始化沙盒时会根据写好的命令进行安装并配置。
小贴士:如果不是初次运行,同时又修改了这里的命令,想让系统再次运行这里面的命令,可以使用命令进行重载。
$ vagrant reload --provision
还可以把要运行的命令单独写在一个脚本中,存放在相同的目录下,然后加载此脚本即可。比如 bootstrap.sh
#!/usr/bin/env bash
apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
rm -rf /var/www
ln -fs /vagrant /var/www
fi
然后在 Vagrantfile 里这样添加:
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise64"
...
config.vm.provision "shell", path: "bootstrap.sh" # 添加这行
end
效果和直接写在 Vagrantfile
是一样的。
打包分发
配置好沙盒内的项目后关闭终端并关机,对沙盒进行打包。
$ vagrant package
执行后会生成一个名为 package.box
的沙盒镜像文件,将此文件传输给他人,使用此文件进行初始化即可得到一个完全相同的环境。
从镜像恢复
假定沙盒镜像文件存在 /home/kane/package.box ,终端执行以下命令。
添加镜像并命名为 Ubuntu
$ vagrant box add Ubuntu /home/kane/package.box
新建并用镜像 Ubuntu 初始化沙盒
$ mkdir /home/kane/Dev && cd /home/kane/Dev && vagrant init Ubuntu
常用命令
$ vagrant init # 初始化
$ vagrant up # 启动虚拟机
$ vagrant halt # 关闭虚拟机
$ vagrant reload # 重启虚拟机
$ vagrant ssh # SSH 至虚拟机
$ vagrant status # 查看虚拟机运行状态
$ vagrant destroy # 销毁当前虚拟机
小贴士:更多 CLI 命令请参看官网文档。
注意事项
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2019-05-06 11:59 AM