使用Vagrant快速构建共享开发环境

通常会有如下场景比如公司原因暂时无法支持开发机硬件或其他原因导致,这个时候开发环境就要么是自己在自己电脑上搭建要么使用虚拟机在虚拟机搭建开发环境。这样做明显会有两个问题一浪费时间,每个新同学都需要浪费大量时间配置;另一个更要命的问题是每个人配置的环境可能会不一致比如我装了php5.6小B装了php7等等一些细微的环境差异导致代码放到最终生产环境时到处出问题。再比如有的时候我可能想学习下Python如果在我的机器上直接装可能用了一次就不再用了浪费机器资源,或者我想运行几个Mysql服务器做一些测试这个时候也是很难办到的,一个一个创建虚拟机挺麻烦;Vagrant就能解决上面说的两个场景,制定一个统一的box分发给每个开发同学既节省时间又能保证环境的一致性;做一个mysqlbox环境分别逐个启动方便各种测试。

Vagrant是什么?

一句话理解Vagrant是构建在虚拟化技术之上的虚拟机运行环境管理工具。

虚拟机:

通过镜像文件创建的虚假机器,虚拟机有以下好处演示环境便于各种例子
保证主机快速运行、减少不必要的垃圾程序、避免每次重新安装、测试不熟悉的应用、体验不同的操作系统。

Vagrant的作用:

建立和删除虚拟机、配置虚拟机运行参数、管理虚拟机运行状态、自动化配置和安装开发环境、打包和分发虚拟机运行环境。使用Vagrant会带来以下好处跨平台、方便移动传播、自动化部署无需人工参与、减少时间成本、统一开发环境。

Vagrant的适用范围:

开发环境、拆分不同的环境

Vagrant依赖:

需要依赖某项具体的虚拟化技术(Virtualbox、WMWare)

Vagrant的安装?

Virtualbox(v5.1.8)https://www.virtualbox.org/wiki/Download_Old_Builds_5_1
Vagrant(1.8.6) https://releases.hashicorp.com/vagrant/1.8.6/
Xshell(Window的命令行工具)
Vagrant需要和Virtualbox版本对应否则容易出错
安装完成后在命令行或windows Xshell验证 vagrant -v

Vagrant基本命令?

box命令:

vagrant box list 查看目前已有的box
vagrant box add 增加一个box
vagrant box remove 删除一个box

虚拟机命令:

vagrant init 初始化配置vagrant
vagrant up 启动
vagrant ssh ssh登录虚拟机
vagrant suspend 挂起虚拟机,不会消耗系统资源
vagrant reload 重启虚拟机
vagrant halt 关闭虚拟机
vagrant status 查看虚拟机状态
vagrant destroy 删除虚拟机

案例一:利用一个box配置一套开发环境

通过官网获取box https://www.vagrantup.com/ 找到自己需要的box,执行命令获取其中的box链接,建议利用迅雷等下载工具下载。
如已经获得 xxx.box 做如下操作
1)将制作好的box拷贝至目录位置
2)将box添加至vagrant (vagrant box add)
3)创建box同名目录,进入后初始化box(vagrant init boxname)
4)修改配置文件如有需要
5)启动虚拟机(vagrant up)
6)登录虚拟机(vagrant ssh)
7)进入想要的环境安装各种自己需要的软件吧
8)基本环境配置完成后可以发布自己的box然后分享给各个小伙伴使用

案例二:Vagrant配置文件解析

  1. -*- mode: ruby -*-
  2. vi: set ft=ruby :
  3. Vagrant.configure(“2”) do |config|
  4. config.vm.box = centos7
  5. config.vm.hostname = dev-coding
  6. config.vm.network forwarded_port”, guest: 80, host: 8888 ,id: nginx #端口转发,如此在母机可以通过127.0.0.1:8888访问虚拟机80端口
  7. config.vm.network forwarded_port”, guest: 8888, host: 8889 ,id: apache’#端口转发,如此在母机可以通过127.0.0.1:8889访问虚拟机8888端口
  8. config.vm.network private_network”, ip: 192.168.1.101”,auto_config: true #设置一个私有的ip,方便在母机通过ip访问虚拟机,母机配置host就可以访问虚拟机做开发了
  9. config.vm.synced_folder “/Users/qinwei/www/dev”, “/home/www”, :nfs => true #虚拟机隐射文件到母机,如此代码完全可以放到自己机器上而不用放到虚拟机防止虚拟机不稳定导致文件丢失
  10. config.vm.provider virtualbox do |vb|
  11. # # Display the VirtualBox GUI when booting the machine
  12. # vb.gui = true
  13. #
  14. # # Customize the amount of memory on the VM:
  15. vb.memory = 1024 #虚拟机内存单位M
  16. vb.cpus = 2 #虚拟机cpu
  17. vb.name = centos7-dev #虚拟机名称
  18. end
  19. # config.vm.provision “shell”, inline: <<-SHELL
  20. # apt-get update #这里可以写shell脚本,虚拟机启动会执行
  21. # apt-get install -y apache2
  22. # SHELL
  23. end

这里需要注意开启文件映射后需要Nginx和apache,sendfile off; 文件同步速度会快很多

案例三:

打包发布一个box

案例四:

实际制作的一个开发环境(还是建议搞个机器做开发机)

附件:增加几个URL

vagrant官网: https://www.vagrantup.com/
VirtualBox官网:https://www.virtualbox.org/wiki/Downloads
vagrant慕课GitHub:https://github.com/apanly/mooc/tree/master/vagrant