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

来源:编程三分钟

ID:coding3min

作者:小熊爱编程

入职就赶紧投入开发,别费时间搭开发环境。——编程三分钟

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

大神在时,大神搭建,大神不在,以手抚膺坐长叹为此,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.txt是python项目自动生成的

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镜像
  2. 先关机,再导出。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

你想更深入了解学习Python知识体系,你可以看一下我们花费了一个多月整理了上百小时的几百个知识点体系内容:

【超全整理】《Python自动化全能开发从入门到精通》python基础教程笔记全放送-马哥教育u200b

www.magedu.com

如果你想系统的全身心学习Python,可以了解下我们马哥教育团队开发的《Python全能开发工程师》课程。

还有免费的直播公开课哦~欢迎了解学习

深入浅出带你学Python冲击年薪30万【马哥教育】-学习视频教程-培训课程-腾讯课堂u200b

ke.qq.com

为您推荐

Leave a Reply

Your email address will not be published.