Vagrant学习笔记
简介
vagrant用于快速创建基于VirtualBox、VMware、AWS的虚拟机,提供易于配置,重复性好,便携式的工作环境。也可以和puppet,chef结合,实现虚拟机管理的自动化。
安装
windows
下载Vagrant
http://www.vagrantup.com/downloads.html
下载VirtualBox
https://www.virtualbox.org/wiki/Downloads
下载git
https://git-scm.com/
安装上述软件
配置环境变量
git: 在环境变量Path中添加
%git_home%/bin
. (附注: git安装后, 默认只会添加%git_home%/cmd到Path中. 由于我们需要使用到ssh, 需要还需要添加/bin.)VirtualBox: 需要将
%VirtualBox_homt%
添加到Path中。这样才能被Vagrant找到。Vagrant: 安装成功后,自动在Path中添加
%Vagrant_home%/bin
,检查一下。
启动Vagrant
进入命令模式,创建测试文件夹
cmd
d:\>md vgdemo
d:\>cd vgdemo
安装Ubuntu 12.04 LTS 32-bit系统到虚拟机中并启动
d:\vgdemo>vagrant init hashicorp/precise32
d:\vgdemo>vagrant up
hashicorp/precise32是自带的box,其系统版本为Ubuntu 12.04。
box是一个zip包,包含了vagrant的配置信息和VirtualBox的虚拟机镜像文件。
box可以在http://www.vagrantbox.es/这里进行下载。
使用box方式安装系统
vagrant box add "boxIdentity" remoteUrl/or/localFile
"boxIdentity"可以是任意字符,用于标识box
可以添加 remoteUrl 远程地址, 或是 localFile 本地box文件。
执行初始化。
vagrant init "boxIdentity"
初始化后会在当前目录生成以一个vagrantfile的文件。
启动虚拟机。
vagrant up
使用ssh登录到虚拟机
d:\vgdemo>vagrant ssh
启动VirtualBox管理工具,在 设置 -> 网络 -> 端口转发中, 可以看到本地端口与虚拟系统的映射。如: 主机端口 2222 | 子系统端口 22
除了上述方式,也可以使用ssh工具,如putty连接到虚拟机。相关配置为:ip: localhost, port: 2222
即可。
ssh登录成功后就进入了Ubuntu系统,可执行安装命令如
sudo apt-get install curl
sudo apt-get install git
wget http://...
基本操作
在/下可以看到一个vagrant目录。这个目录自动映射于本地创建的目录,如本例的vgdemo。
Vagrantfile配置文件详解
在vgdemo目录下,可以看到名为vagrantfile
的文件
Vagrant使用Ruby开发,所以它的配置语法也是Ruby的。
修改完Vagrantfile配置后,必须用vagrant reload
重启VM后,配置才能生效。
- 配置基本说明
Vagrant.configure("2") do |config|
# ...
end
configure("2")描述的是使用Vagrant 2.0.x配置方式。
Vagrant 1.0.x的配置方式为:Vagrant::COnfig.run do |config| ...
- box设置
config.vm.box = "boxIdentity"
配置Vagrant要去启用哪个box作为系统。这个也是我们在前面输入的vagrant init box boxIdentity
中的所指定的box的名称。默认名称为base
。
可以通过VBoxManager命令行工具设定VM。示例:
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "astaxie", "--memory", "512"]
end
这行设置通过调用VBoxManager的modifyvm
命令,设置VM的名称为astaxie
,内存为512MB。
-
网络设置
Vagrant有两种方式进行网络连接.
(1)host-only主机模式,意思是主机与虚拟机之间的网络互访。其他人访问不到你的虚拟机。
(2)bridge桥接模式,此模式下VM如同局域网中的一台独立的直接虚拟机,可以被其他机器访问。
config.vm.network: private_network, ip: "11.11.11.11"
这里设置为host-only模式,且虚拟机ip设置为"11.11.11.11"
- hostname设置
config.vm.hostname = "go-app"
host用于识别虚拟主机。特别在有多台虚拟机时,务必进行设置。
-
同步目录
除了默认的/vagrant
同步目录外,还可以设置额外的同步目录:
config.vm.synced_folder "d:/local/dir", "/vm/dir/"
第一个参数是本地目录,第二个参数为虚拟机目录。
- 端口转发
config.vm.network: forwarded_port, guest: 80, host: 8080
设置将主机上的8080端口forward到虚拟机的80端口上
Vagrant常用命令
vagrant box add "boxIdentity" remoteUrlorLocalFile
添加boxvagrant init "boxIdentity"
初始化boxvagrant up
启动虚拟机vagrant ssh
登录虚拟机vagrant box list
显示当前已添加的box列表vagrant box remove "boxIdentity"
删除boxvagrant destroy
停止当前正在运行的虚拟机并销毁所有创建的资源vagrant halt
关闭虚拟机vagrant package
打包当前运行的虚拟机的环境vagrant plugin
用于安装卸载插件vagrant reload
重启虚拟机,主要用于重新载入配置文件vagrant suspend
挂起虚拟机vagrant resume
恢复挂起状态vagrant ssh-config
输出ssh连接信息vagrant status
输出当前虚拟机的状态
配置多台虚拟机
Vagrant支持单机启动多台虚拟机,支持一个配置文件启动多台。
Vagrant.configure("2") do |config|
config.vm.define :web do |web|
web.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "web", "--memory", "512"]
end
web.vm.box = "base"
web.vm.hostname = "web"
web.vm.network :private_network, ip : "11.11.11.1"
end
config.vm.define :db do |db|
db.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "db", "--memory", "512"]
end
db.vm.box = "base"
db.vm.hostname = "db"
db.vm.network :private_network, ip : "11.11.11.2"
end
end
这里使用了:web
和:db
定义了两个VM,设置完后再使用vagrant up
启动。可以通过vagrant ssh web
和vagrant ss db
分别登录指定虚拟机上。
验证两台虚拟机间的通信: (验证方法: 在web虚拟机上通过ssh登录到db虚拟机)
## 验证流程顺序
vagrant ssh web
@web: ssh 11.11.11.2
@db: