和重复搭建开发环境说 Bye Bye 之Vagrant

小熊 虚拟机评论3,575字数 3487阅读11分37秒阅读模式

和重复搭建开发环境说 Bye Bye 之Vagrant

 入职就赶紧投入开发,别费时间搭开发环境。——编程三分钟
每每同事入职,都要在自己电脑上配置一堆环境,神费力;每每开发测试都要重新配置开发环境,手工搭建,步骤很繁琐,极易出错
大神在时,大神搭建,大神不在,以手抚膺坐长叹为此,VVVVVagrant横空出世!!!

虚拟机编排工具Vagrant

和重复搭建开发环境说 Bye Bye 之Vagrant
他,基于虚拟机,能打造出完美的物理隔离!
他,一次搭建,处处使用,拷贝一个镜像就能让新员工立即投入开发,当属老板最爱
他,只需要一个文本,寥寥几行,就能驾驭网络配置、建立集群
良好的第三方支持也让他如鱼得水,支持shell脚本、支持ansible自动部署等等。他就是我们的主角 Vagrant 。
这次,我们就以搭建python开发环境为例,享受vagrant给我们带来的便利。

安装

mac环境两行命令

brew cask install virtualbox
brew cask install vagrant

其他环境下载两个安装包即可
vagrant包 https://www.vagrantup.com/downloads.html
virtualbox https://www.virtualbox.org/wiki/Downloads
检查是否安装成功

$ vagrant version
Installed Version: 2.2.5
Latest Version: 2.2.5
You're running an up-to-date version of Vagrant!

初始化环境

第一种下载镜像的方法

vagrant box add --provider virtualbox centos/7

其中--provider virtualbox代表校验是否是virtualbox官方提供
第二种下载方法

vagrant box add  --name centos/7  --provider virtualbox  /Users/pzqu/Documents/code/test/vbox/centos_virtualbox.box

此处的/Users/pzqu/Documents/code/test/vbox是我的选定的下载目录
对box的一系列操作命令文档见这里https://www.vagrantup.com/docs/cli/box.html。
初始化

cd /Users/pzqu/Documents/code/test/vbox
vagrant init centos/7

此时目录下会生成一个Vagrantfile文件,此文件就是自动化配置的关键
https://www.vagrantup.com/docs/vagrantfile/
看一看里面的注释大概就知道怎么写了,主要是ruby的语法,可以挂载本地目录到虚拟机里,配置网络(接入公网、仅虚拟机访问都可以)等。
除了对虚拟机进行一些配置外,还可以通过各类Provisioner自动化地安装软件、调整配置。
详见 https://www.vagrantup.com/docs/provisioning/
我的配置比较简单,使用centos/7的系统,把本机代码项目的目录挂载到/data/code目录就可以了。
启动虚拟机以后直接在虚拟机里安装开发环境,最后再打成镜像就妥了。
配置如下

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.synced_folder "/Users/pzqu/Documents/code/gerrit", "/data/code"
end

挂载文件目录的时候报错
和重复搭建开发环境说 Bye Bye 之Vagrant
安装此插件即可

vagrant plugin install vagrant-vbguest

搭建开发环境

Vagrantfile所在目录下,使用vagrant up启动虚拟机
再用vagrant ssh登陆虚拟机
然后执行以下命令自动安装我们想要的python环境,注意requirements.txtpython项目自动生成的

pip install -r requirements.txt

补充:自动生成requirements文件的方法

pip freeze > requirements.txt

配置pycharm

打开配置,添加插件
和重复搭建开发环境说 Bye Bye 之Vagrant
配置Vagrant环境
和重复搭建开发环境说 Bye Bye 之Vagrant
指定虚拟机中的Python路径,第一步选 show all
和重复搭建开发环境说 Bye Bye 之Vagrant
选择Vagrant选择镜像目录与虚拟机中python路径
和重复搭建开发环境说 Bye Bye 之Vagrant
和重复搭建开发环境说 Bye Bye 之Vagrant
配置启动方式,这里我生成swagger,主要是Python interpreterpython路径,Working direftory项目路径(注意是虚拟机中映射的路径,我这里在上一节配置的/data/code,我们在本地开发的时候会自动同步修改)
和重复搭建开发环境说 Bye Bye 之Vagrant
运行
和重复搭建开发环境说 Bye Bye 之Vagrant

导出box镜像文件给别人使用

1.运行 vboxmanage list vms 命令,可以看出我们的vagrant下的虚拟机列表(我的虚拟机只有一个box,“vbox_default_1563884434349_3918“。)

$ vboxmanage list vms
"vbox_default_1563884434349_3918" {59864f0b-9731-4839-baa2-95d9a6aab731}
  1. 导出box镜像
    先关机,再导出。vagrant package是导出box的打包命令
vagrant package --base vbox_default_1563884434349_3918 --output centos7_hanah_environment.box

--base 代表本地 
vbox_default_1563884434349_3918是你要导出的box的名称 
--output代表导出 
centos7_hanah_environment.box 表示导出后的box名为centos7_hanah_environment.box,并保存在当前目录下

  1. 接下来你会看到如下内容,就是导出成功了
$ vagrant package --base vbox_default_1563884434349_3918 --output centos7_hanah_environment.box
==> vbox_default_1563884434349_3918: Exporting VM...
==> vbox_default_1563884434349_3918: Compressing package to: /Users/pzqu/Documents/code/test/vbox/centos7_hanah_environment.box

喝完一瓶奶的功夫就完成了,这取决于你的box的大小,我的box大约900M。
这下直接发给你的朋友,一句命令就获得了一个和你完全相同的开发/测试环境。

$ vagrant box add centos7_hanah_environment ./centos7_hanah_environment.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos7_hanah_environment' (v0) for provider:
    box: Unpacking necessary files from: file:///Users/pzqu/Documents/code/test/vbox/centos7_hanah_environment.box
==> box: Successfully added box 'centos7_hanah_environment' (v0) for 'virtualbox'!

vagrant box add 别名 box名

其他想法

听起来vagrant所做的这些事情和docker有很多重叠的地方,为什么不直接用docker来做呢?不仅可以一秒启动一个最适合的环境,而且又轻量又纯净。

权衡利弊,vagrant本身并不是虚拟化技术,要把他跑起来还要安装virtualbox等虚拟化平台,他更像是虚拟机的外挂程序、编排工具;针对的是批量虚拟机的管理,常常用于瞬间创建一个开发环境。

而docker本身就是虚拟化技术,构建迅速,不占用资源;针对的是应用程序的编排,常常用于统一开发环境与生产环境。
说来说去,与其说是vagrant与docker,不如说使用是虚拟化平台与容器之间的区别。

和重复搭建开发环境说 Bye Bye 之Vagrant

docker还是依赖于系统内核,如果内核不同,需要重新构建。
有时间我们来聊聊docker创建开发环境,有机会再来聊聊Docker Machine

weinxin
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
小熊