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

副标题#e#

每每新同事入职,都要在自己电脑上配置一堆环境,费神费力;每每开发测试都要重新配置开发环境,手工搭建,步骤很繁琐,极易出错。

大神在时,大神搭建,大神不在,以手抚膺坐长叹。为此,VVVVVagrant横空出世!!!

虚拟机编排工具Vagrant

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

他,基于虚拟机,能打造出完美的物理隔离!

他,一次搭建,处处使用,拷贝一个镜像就能让新员工立即投入开发,当属老板的最爱!

他,只需要一个文本,寥寥几行,就能驾驭网络配置、建立集群!

良好的第三方支持也让他如鱼得水,支持shell脚本、支持ansible自动部署等等。他就是我们的主角 Vagrant 。

这次,我们就以搭建python开发环境为例,享受vagrant给我们带来的便利。

安装

mac环境两行命令

  1. brew cask install virtualbox 
  2. brew cask install vagrant 

其他环境下载两个安装包即可

vagrant包 https://www.vagrantup.com/downloads.html

virtualbox https://www.virtualbox.org/wiki/Downloads

检查是否安装成功

  1. $ vagrant version 
  2. Installed Version: 2.2.5 
  3. Latest Version: 2.2.5 
  4.  
  5. You're running an up-to-date version of Vagrant! 

初始化环境

第一种下载镜像的方法

  1. vagrant box add --provider virtualbox centos/7 

其中--provider virtualbox代表校验是否是virtualbox官方提供

第二种下载方法

  1. 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。

初始化

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

此时目录下会生成一个Vagrantfile文件,此文件就是自动化配置的关键

https://www.vagrantup.com/docs/vagrantfile/

看一看里面的注释大概就知道怎么写了,主要是ruby的语法,可以挂载本地目录到虚拟机里,配置网络(接入公网、仅虚拟机访问都可以)等。

除了对虚拟机进行一些配置外,还可以通过各类Provisioner自动化地安装软件、调整配置。

详见 https://www.vagrantup.com/docs/provisioning/

我的配置比较简单,使用centos/7的系统,把本机代码项目的目录挂载到/data/code目录就可以了。

启动虚拟机以后直接在虚拟机里安装开发环境,最后再打成镜像就妥了。

配置如下

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

挂载文件目录的时候报错

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

安装此插件即可

  1. vagrant plugin install vagrant-vbguest 

搭建开发环境

在Vagrantfile所在目录下,使用vagrant up启动虚拟机

再用vagrant ssh登陆虚拟机

然后执行以下命令自动安装我们想要的python环境,注意requirements.txt是python项目自动生成的

  1. pip install -r requirements.txt 

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

  1. 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镜像文件给别人使用

#p#副标题#e#

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

  1. $ vboxmanage list vms 
  2. "vbox_default_1563884434349_3918" {59864f0b-9731-4839-baa2-95d9a6aab731} 

2.导出box镜像

先关机,再导出。vagrant package是导出box的打包命令

  1. 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,并保存在当前目录下

3.接下来你会看到如下内容,就是导出成功了

  1. $ vagrant package --base vbox_default_1563884434349_3918 --output centos7_hanah_environment.box 
  2. ==> vbox_default_1563884434349_3918: Exporting VM... 
  3. ==> vbox_default_1563884434349_3918: Compressing package to: /Users/pzqu/Documents/code/test/vbox/centos7_hanah_environment.box 

喝完一瓶奶的功夫就完成了,这取决于你的box的大小,我的box大约900M。

这下直接发给你的朋友,一句命令就获得了一个和你完全相同的开发/测试环境。

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

vagrant box add 别名 box名

其他想法

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

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

而docker本身就是虚拟化技术,构建迅速,不占用资源;针对的是应用程序的编排,常常用于统一开发环境与生产环境。

#p#副标题#e##p#分页标题#e#

说来说去,与其说是vagrant与docker,不如说使用是虚拟化平台与容器之间的区别。

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

docker还是依赖于系统内核,如果内核不同,需要重新构建。

有时间我们来聊聊docker创建开发环境,有机会再来聊聊Docker Machine

本文转载自微信公众号「 编程三分钟」,可以通过以下二维码关注。转载本文请联系 编程三分钟公众号。

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

【编辑推荐】

  1. 浅谈虚拟机内存区
  2. VMware虚拟机三种联网方法及原理
  3. 虚拟机不能上网?虚拟机和宿主机不能互通?一文搞定网络问题
  4. 深入理解Java虚拟机(高效并发)

【责任编辑:武晓燕 TEL:(010)68476606】
点赞 0

dawei

【声明】:北京站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。