Vagrant 是一个可创建轻量级、高复用性和便于移植的开发环境的工具。
此文章是作者折腾vagrant的笔记, 希望大家看后,不再去网上搜罗资料, 能顺利搭建vagrant环境。vagrant更新较快, 还建议大家以官网为主。Vagrant官网
面临的问题
- 开发人员设备不统一, win , Mac , Linux等
- 开发环境不统一, 各种软件安装、版本和依赖管理困难
- 没有专业的人员来进行系统管理
- 换了设备还要折腾新的开发环境
如果你希望本地开发, 同时拥有统一的开发环境, Vagrant 可以帮你搞定。
实战:Windows下,使用Vagrant部署Linux 开发环境
安装VirtualBox
下载 Vagrant
-
下载安装Windows版
window版是msi安装文件,直接界面安装即可。
如果下载centos版本,是rmp包
rpm -ivh vagrant_1.8.1_x86_64.rpm
安装 Vagrant
mkdir vagrant_getting_started
cd vagrant_getting_started
vagrant init
执行init命令后, 会在当前目录生成一个配置文件 Vagrantfile
添加Vagrantbox
vagrant box add hashicorp/precise64
vagrant up
其中 hashicorp/precise64
是在(https://atlas.hashicorp.com/boxes/search)这里定义的, 会直接从网络下载镜像。
鉴于下载速度极慢,Vagrantbox还可以支持下载好直接本地add.
- Vagrantbox资源及下载到本地
- 安装操作系统镜像, 例如我们下载一个centos镜像
[CentOS 6.5 x86_64](https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box]
从本地添加vbox
mkdir vagrant_getting_started
mkdir vagrant_vbox #centos65-x86_64-20140116.box 下载到此目录
cd vagrant_getting_started
vagrant box add centos65 vagrant_vbox/centos65-x86_64-20140116.box
vagrant up
其中centos65
是我们自定义的vbox镜像命名,vagrant_vbox/centos65-x86_64-20140116.box
是vbox下载镜像的本地路径。
查看已经添加的box列表
vagrant box list
centos65 (virtualbox, 0)
说明添加成功。
接下来可以配置Vagrantfile
Vagrant.configure(2) do |config|
#box add 的名字
config.vm.box = "centos65"
#Vagrant的三种网络配置
#端口映射(Forwarded port) 把宿主计算机的端口映射到虚拟机的某一个端口上,访问宿主计算机端口时,请求实际是被转发到虚拟机上指定端口的。
#例如下面的配置,将访问宿主计算机8080端口的请求都转发到虚拟机的80端口上进行处理 #访问localhost:8080,对应访问虚拟机的80端口
#优点:容易实现外网访问虚拟机
#缺点:端口比较多时,配置麻烦;不支持在宿主机器上使用小于1024的端口来转发。比如:不能使用SSL的443端口来进行https连接。
config.vm.network "forwarded_port", guest: 80, host: 8080
#私有网络(Private network) ,只有主机可以访问虚拟机,如果多个虚拟机设定在同一个网段也可以互相访问,当然虚拟机是可以访问外部网络的。
#优点:安全,只有自己能访问
#缺点:因为私有的原因,所以团队成员其他人不能和你协作
config.vm.network "private_network", ip: "192.168.33.10"
#公有网络(Public network) ,虚拟机享受实体机器一样的待遇,一样的网络配置,vagrant1.3版本之后也可以设定静态IP。
#优点:方便团队协作,别人可以访问你的虚拟机
#缺点:需要有网络,有路由器分配IP
config.vm.network "public_network", ip: "192.168.12.253"
#设置文件同步,如下 ../www_data 是本地目录, /vagrant_data是虚拟机文件目录
#两个目录设置为同步,这样就可以直接本地编辑文件,使用虚拟机配置的软件环境了。
config.vm.synced_folder "../www_data", "/vagrant_data"
启动虚拟机
vagrant up
配置ssh 登录
vagrant ssh
执行此命令后,vagrant会生成ssh配置,
hostname: localhost
port: 2222
Connection Type: SSH
User Name: vagrant
Password: vagrant
使用ssh 工具 , 如 xshell
即可登录虚拟机
另外,登录到虚拟机如果想使用root,可以配置root密码
sudo passwd root
打包分发
当你配置好开发环境后,退出并关闭虚拟机。在终端里对开发环境进行打包
vagrant package
打包完成后会在当前目录生成一个 package.box
的文件,将这个文件传给其他用户,其他用户只要添加这个 box 并用其初始化自己的开发目录就能得到一个一模一样的开发环境了。
也可以把配置文件打包进box
vagrant package --vagrantfile Vagrantfile
Vagrant 常用命令
Vagrant的命令很多.官网上有 完整的列表, 这里会介绍一些常用的.
vagrant up
vagrant up这会运行基于 Vagrantfile配置文件的vagrant. 我用来启动和重启开发环境.
vagrant suspend
vagrant suspend 这个能暂停当前环境操作. 最好在关机前做好这一步,以防下次开机配置无法恢复.
Starting, Pausing, and Resuming: 启动和重启可以直接使用vagrant up. 所有之前的状态都会被保存起来.
vagrant destroy
vagrant destroy永久性的移除你的虚拟环境.
vagrant reload
vagrant reload 和vagrant reload --provision如果环境挂了,可以重启.如果加了--provision, 就会恢复资料库. 这在使用Cookbooks 或Puppet移除或添加东西时很有效果.
vagrant ssh
vagrant ssh所有公共文件夹中的操作都会同步到虚拟环境,但如果需要直接操作可使用该命令.
vagrant ssh-config
vagrant ssh-config这个显示连接到虚拟环境的所有配置项信息.