和重复搭建开发环境说 Bye Bye 之Vagrant
每每新同事入职,都要在自己电脑上配置一堆环境,费神费力;每每开发测试都要重新配置开发环境,手工搭建,步骤很繁琐,极易出错。
大神在时,大神搭建,大神不在,以手抚膺坐长叹。为此,VVVVVagrant横空出世
虚拟机编排工具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/ --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
挂载文件目录的时候报错

安装此插件即可
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
打开配置,添加插件

配置Vagrant环境

指定虚拟机中的Python路径,第一步选 show all

选择Vagrant选择镜像目录与虚拟机中python路径


配置启动方式,这里我生成swagger,主要是Python interpreterpython路径,Working direftory项目路径(注意是虚拟机中映射的路径,我这里在上一节配置的/data/code,我们在本地开发的时候会自动同步修改)
运行

导出box镜像文件给别人使用
1.运行 vboxmanage list vms 命令,可以看出我们的vagrant下的虚拟机列表(我的虚拟机只有一个box,“vbox_default_1563884434349_3918“。)
$ vboxmanage list vms
"vbox_default_1563884434349_3918" {59864f0b-9731-4839-baa2-95d9a6aab731}
导出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,并保存在当前目录下
接下来你会看到如下内容,就是导出成功了
$ 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,不如说使用是虚拟化平台与容器之间的区别。

docker还是依赖于系统内核,如果内核不同,需要重新构建。
有时间我们来聊聊docker创建开发环境,有机会再来聊聊Docker Machine
转载:https://mp.weixin.qq.com/s/t04P-_eedsH8AjphH4tDSA
和重复搭建开发环境说 Bye Bye 之Vagrant的更多相关文章
- 深入浅出Docker(五):基于Fig搭建开发环境
概述 在搭建开发环境时,我们都希望搭建过程能够简单,并且一劳永逸,其他的同事可以复用已经搭建好的开发环境以节省开发时间.而在搭建开发环境时,我们经常会被复杂的配置以及重复的下载安装所困扰.在Docke ...
- 一、Electron + Webpack + Vue 搭建开发环境及打包安装
目录 Webpack + Vue 搭建开发环境及打包安装 ------- 打包渲染进程 Electron + Webpack 搭建开发环境及打包安装 ------- 打包主进程 Electron + ...
- GJM : Unity3D HIAR -【 快速入门 】 二、搭建开发环境
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- maven实战(01)_搭建开发环境
一 下载maven 在maven官网上可下载maven:http://maven.apache.org/download.cgi 下载好后,解压.我的解压到了:D:\maven\apache-mave ...
- Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境
引言 简单介绍一下Cordova的来历,Cordova的前身叫PhoneGap,自被Adobe收购后交由Apache管理,并将其核心功能开源改名为Cordova.它能让你使用HTML5轻松调用本地AP ...
- Win10 IoT C#开发 1 - Raspberry安装IoT系统及搭建开发环境
Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. The ...
- java攻城师之路(Android篇)--搭建开发环境、拨打电话、发送短信、布局例子
一.搭建开发环境 1.所需资源 JDK6以上 Eclipse3.6以上 SDK17, 2.3.3 ADT17 2.安装注意事项 不要使用中文路径 如果模拟器默认路径包含中文, 可以设置android_ ...
- python入门到精通[一]:搭建开发环境
摘要:Python认识,及在windows和linux上安装环境,测试是否安装成功. 1.写在前面 参加工作也有5年多了,一直在做.net开发,近一年有做NodeJS开发.从一开始的不习惯,到逐步适应 ...
- Android开发系列之搭建开发环境
接触Android好久了,记得09年刚在中国大陆有点苗头的时候,我就知道了google有个Android,它是智能机操作系统.后来在Android出1.5版本之后,我第一时间下载了eclipse开发工 ...
随机推荐
- 导航条按钮的设置UIBarButtonItem
1.目的 2.代码 // 设置导航栏的按钮 UIButton *leftNavBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35 ...
- vue环境搭建及创建项目
安装node环境:node环境下载地址:https://nodejs.org/zh-cn/download/,可根据对应的操作系统版本下载安装 安装完成后查看对应的node和npm版本,如没有出现对应 ...
- ssh修改端口
安装防火墙 sudo yum -y install firewald sudo systemctl start firewald.service sudo firewall-cmd --list-al ...
- dede 对 单个 字段 编辑
{dede:field.body runphp='yes'} $body = str_replace("src=\"/uploads","src=\" ...
- Ceph FS 挂载
Cephfs使用挂载方式有两种 1.使用linux kernel挂载 mount 2.使用ceph-fuse挂载. 1.下图为mount挂载 mount -t ceph 10.110.180.112: ...
- 安装folly库以及folly的ConcurrentHashMap的简单使用
我在写grpc的实例时, 需要使用一个多线程的hash map, C++标准库中没有多线程的hash map, facebook开源的folly中存在大量的基础类, 中间存在一个高性能的hash ma ...
- Python基础Day1—上
一.计算机基础 CPU:中央处理器,相当于人的大脑:运算中心与控制中心的结合. 内存:临时存储数据,与CPU交互. 硬盘:永久存储数据. 内存的优点:读取速度快 内存的缺点:容量小,造价高,断电数据会 ...
- java连接Oracle数据库的操作说明
在测试中,我们常常需要连接Oracle数据库来进行查询对比.下面,我们就来看看,如何使用java代码来连接数据库,并且取出我们想要的数值. 首先,java中如果要连接Oracle数据库,需要jdbc的 ...
- AngularJs中Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.3.15/
我在使用angularjs的时候报出来这个错误: Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.3.15/ 当时 ...
- kafka数据组织+集群架构
1.数据组织: partition:Kafka的topic可以划分成一个或多个partition,每个partition存储着这个topic的一部分数据. partition副本:若一个topic的副 ...