VitualBox + Vagrant 搭建虚拟机

虚拟开发环境

在项目开发中,我们经常会遇到各种各样的问题,需要使用虚拟开发环境来完成,虚拟和正式环境一样的虚拟开发环境,随着个人开发机硬件的升级,可以在本机跑虚拟机,如VMware、VirtualBox等。因此使用虚拟化开发环境,在本机可以运行自己喜欢的OS(Windows、Ubuntu、Mac等),开发的程序运行在虚拟机中,这样迁移到生产环境可以避免环境不一致导致的莫名错误。

虚拟开发环境有着很多的好处,本文安装虚拟机的原因在于模拟在远程服务器上搭建CI,并完成项目中持续集成的一系列工作。故搭建虚拟机只是第一步,在此基础上,后面还会有一系列的文章,介绍CI相关。

Vagrant

Vagrant is a tool for building and managing virtual machine environments in a single workflow. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases production parity, and makes the "works on my machine" excuse a relic of the past.

Vagrant的设计是为了方便的实现虚拟化环境,使用Ruby开发,基于VirtualBox、VMware等虚拟机管理软件的接口,提供了一个可配置、轻量级的便携式虚拟开发环境。使用Vagrant可以很方便的就建立起来一个虚拟环境,而且可以模拟多台虚拟机,因此可以在开发机模拟分布式系统。

安装 VirtualBox 和 Vagrant

VirtualBox是一款开源免费的虚拟机软件,跨平台,Windows ,OS X 都可以使用。Vagrant 也是跨平台的。二者都需要到官网进行下载安装:

安装好VirtualBox和Vagrant后,就要在VM上使用操作系统了,一个打包好的操作系统在Vagrant中称为Box,即Box是一个打包好的操作系统环境。可以在Vagrant Cloud选择系统并进行下载。

安装Box

这里我选择的是ubuntu.box系统,并根据官网提示,直接运行如下指令进行安装。

如图所示也可以选择直接修改Vagrantfile进行配置,修改后使用时如果该box还没有安装,Vagrant会自动进行下载安装。但根据以上步骤,当前Vagrant还未产生Vagrantfile文件,因此该法这里不可行。最简单的方法是在命令行执行上述两条命令。

运行该命令后,Terminal结果如下,同时该目录会自动创建Vagrantfile文件。

==> default: Successfully added box 'ubuntu/trusty64' (v20170918.0.0) for 'virtualbox'!
==> default: Importing base box 'ubuntu/trusty64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Setting the name of the VM: VOS_default_1505893534153_40845
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 4.3.36
    default: VirtualBox Version: 5.1
==> default: Mounting shared folders...
    default: /vagrant => /Users/bqliu/Documents/VOS
Vagrantfile

Vagrantfile是Vagrant的配置文件,告诉 vagrant 怎样去运行该虚拟机,主要包括三个方面的配置,虚拟机的配置、SSH配置、Vagrant的一些基础配置。其存在的目的主要为以下两方面:

  1. 标志项目的根目录,Vagrant的许多配置都与这个根目录有关。
  2. 描述项目运行所需的机器和资源类型,包括要安装的软件和权限。

Vagrant的内置的命令 vagrant init会产生一个根目录,并自动生成Vagrantfile目录。

Tips: 修改完Vagrantfile的配置后,记得要vagrant reload命令来重启VM之后才能使用VM更新后的配置

安装Box的另一种方法
  1. vagrant init 生成Vagrantfile配置文件
  2. vagrant box add <box_name>安装Box
  3. 修改Vagrantfile配置文件,使用Box
    更多详细步骤见官网文档
查看可以使用的Box
vagrant box list
配置网络

如果想让你的电脑跟虚拟机之间可以相互通信,比如你在虚拟机上安装了一个 Web 服务器,你打算可以在本地电脑上,或者同一网络内的其它设备可以访问到这台虚拟机上的项目。这需要去做一些配置,有三种方式,端口转发(Forwarded Ports),私有网络(Private Network),公有网络(Public Network)。

下面,可以在 vagrantfile 中配置一个端口转发:

config.vm.network "forwarded_port", guest: 8080, host: 8080, host_ip: "127.0.0.1"

该配置保证在虚拟机上启动服务器后,本地电脑可以使用8080端口对该服务器进行访问。关于私有网络和共有网络的配置方法见官网

Tips:在连接虚拟机时,会出现重复retry,但无法成功连接的问题,可以在 vagrantfile 中配置,给virtualbox一个ip地址

config.vm.network "private_network", ip: "192.168.33.10"

启动虚拟机

vagrant up
选择一个网络

若是本地电脑连接虚拟机,选择wifi模式就可

连接虚拟机

vagrant ssh

设置密码

sudo passwd

之后就可以根据你安装的操作系统,正常的使用虚拟机了

常用 Vagrant 命令

初始化box:vagrant init
启动虚拟机:vagrant up
登录虚拟机:vagrant ssh
显示box列表:vagrant box list
添加box:vagrant box add
删除box:vagrant box remove
关机:vagrant halt
重启:vagrant reload
销毁:vagrant destroy
打包虚拟机环境:vagrant package

Special thanks

My pair:Benqing

References

使用 Vagrant 搭建本地开发环境的教程
Vagrant by HashiCorp
Vagrant的介绍

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,009评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,808评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,891评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,283评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,285评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,409评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,809评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,487评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,680评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,499评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,548评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,268评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,815评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,872评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,102评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,683评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,253评论 2 341

推荐阅读更多精彩内容

  • 开发需要在各种系统上进行开发任务,运维则需要在各种系统上学习工具使用。因此,虚拟机恐怕也是 IT 人员最常使用的工...
    李广慧阅读 5,513评论 3 24
  • 1,介绍Vagrant 我们做web开发的时候经常要安装各种本地测试环境,比如apache,php,mysql,r...
    meng_philip123阅读 2,501评论 0 12
  • Vagrant是什么 Vagrant是一个软件,可以自动化虚拟机的安装和配置流程。目前市面上个人PC的主流操作系统...
    北魏企鹅阅读 29,922评论 3 40
  • [Vagrant入门一(转)]阅读目录VirtualBox安装Vagrant安装Vagrant配置links 原文...
    汉相萧何阅读 918评论 0 0
  • 昨天没有写阅读笔记 我没有见到过比丹尼更加优秀的男人了,如果我是伊芙,我也会这么做的,嫁给他!实际上伊芙的病越来越...
    Cheer_up阅读 248评论 0 0