Vagrant 简单使用
一. 安装
Vagrant 本质上来说,是对 virtualbox,vmware,kvm 等镜像的管理操作,是一个中间层技术。使用它的前提是你本机必须有 virtualbox,vmware,kvm 等虚拟机。
Vagrant 的安装非常简单,各个 linux 发行版可以直接通过包管理安装,OS X 也可以通过 Homebrew Cask来安装。
$ brew cask install vagrant
建立你自己的 Vagrant 也非常简单,
$ mkdir /your/path/vagrant_name; cd /your/path/vagrant_name; vagrant init gentoo
此命令会在 /your/path/vagrant_name
目录下建立 Vagrantfile 基础配置文件,你可以通过 git 等方式来分享。下面在此目录下执行 vagrant box add xxx
去拉一个现成的镜像下来,鄙人还是习惯拉 Gentoo 的一个 vbox 镜像。当然下面例子中的 Gentoo 镜像存放在 dropbox 中,内地的网络环境 你懂得,故需要一些 你懂得 操作,这里不做介绍了。
$ vagrant box add gentoo https://dl.dropboxusercontent.com/s/xfl63k64zliixid/gentoo-20131029-i686.box
==> box: Adding box 'gentoo' (v0) for provider:
box: Downloading: https://dl.dropboxusercontent.com/s/xfl63k64zliixid/gentoo-20131029-i686.box
==> box: Successfully added box 'gentoo' (v0) for 'virtualbox'!
除了直接去网址下载,也可以直接下载 Vagrant Cloud 中的镜像
$ vagrant box add d11wtq/gentoo
具体需要什么镜像可以去如下网址:
二. 运行
镜像拉下来后,就可以启动了
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'gentoo'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: vagrant_default_1410100872394_79587
==> 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 => 2222 (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: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => /Users/Havee/Documents/git/vagrant
嗯,你的虚拟机已经起来了,连接的话,直接 vagrant ssh
即可
$ vagrant ssh
vagrant@local ~ $ uname -a
Linux local 3.10.7-gentoo-r1 #1 SMP Wed Oct 30 20:15:42 UTC 2013 i686 Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz GenuineIntel GNU/Linux
随后,你就可以随意的根据你的习惯,去部署你的一切。当然如果你觉得 vbox 笨重的话,docker 是一个非常好的解决方案。
三. 配置
Vagrantfile 文件就是基础配置文件下面列出一些常用的配置项
a. 基础设定
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "gentoo"
config.vm.box_check_update = false
config.vm.network "forwarded_port", guest: 80, host: 8080 # 端口转发
config.vm.network "private_network", ip: "192.168.33.10" # 或 config.vm.network "public_network",顾名思义
config.ssh.forward_agent = true
config.vm.synced_folder "./", "/vagrant"
end
一目了然的配置,名称,更新,端口转发,网络,ssh 以及共享目录。
b. Provider
由于 VirtualBox 免费,且跨平台,安装方便,很多人都使用 VirtualBox。以 VirtualBox 为例:
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
......
config.vm.provider "virtualbox" do |vb|
vb.gui = true
vb.name = "gentoo"
vb.memory = 1024
vb.cpus = 2
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "80"]
end
......
end
以上配置也是一目了然,VMWare Fusion 呢
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
......
config.vm.provider "vmware_fusion" do |vb|
vb.gui = true
vb.vmx["memsize"] = "1024"
vb.vmx["numvcpus"] = "2"
end
......
end
其他的虚拟机,请阅读文档: http://docs.vagrantup.com/v2/providers/index.html
c. 多机环境
尽管我觉得多个 box 运行一个环境,非常的奢侈,与其跑多个虚拟机,倒不如用 docker 来管理。但谁知道大家的 cpu, ram 是否叼炸天呢。各有所好嘛……
config.vm.define :app1 do |app1|
app1.vm.box = "app1"
app1.vm.network "private_network", ip: "192.168.33.10"
app1.memory = 512
app1.cpus = 2
app1.vm.customize [ "modifyvm", :id, "--name", "app1", "--cpuexecutioncap", "50" ]
end
config.vm.define :app2 do |app2|
app2.vm.box = "app2"
app2.vm.network "private_network", ip: "192.168.33.11"
app2.memory = 512
app2.cpus = 1
app1.vm.customize [ "modifyvm", :id, "--name", "app2", "--cpuexecutioncap", "40" ]
end
......
启动
$ vagrant up app1
$ vagrant up app2
d. 常用命令
$ vagrant init # 初始化
$ vagrant up # 启动
$ vagrant halt # 关闭
$ vagrant reload # 重启
$ vagrant suspend
$ vagrant resume
$ vagrant ssh # ssh 连接到虚拟机
$ vagrant status # 虚拟机状态
$ vagrant destroy
$ vagrant package # 打包
$ vagrant box add name url # 添加镜像
$ vagrant box list # 列表
$ vagrant box remove name # 移除镜像
$ vagrant box repackage # 重新打包
四. 打包环境
万事俱备,公司内部要统一开发环境,打包出来让同事在统一环境下开发吧,以后不会出现 我机子上没这个问题呀 这种说不清道不明的状况了。
打包,当然是退出你的虚拟机后再操作的。
$ vagrant package
==> gentoo: Attempting graceful shutdown of VM...
==> gentoo: Clearing any previously set forwarded ports...
==> gentoo: Exporting VM...
==> gentoo: Compressing package to: /Users/Havee/Documents/git/vagrant/package.box
将 package.box 拿给同事吧,让他们加入该 box,你们的开发环境就完全一致了
$ vagrant box add gentoo /path/package.box