Vagrant使用过程
vagrant简介
Vagrant是用于在单个工作流程中构建和管理虚拟机环境的工具。 凭借易于使用的工作流程并专注于自动化,Vagrant缩短了开发环境的设置时间,提高了生产平价,并使“在我的机器上工作”成为过去的遗物。
下载地址
VirtualBox https://www.virtualbox.org/wiki/Downloads
Vagrant https://www.vagrantup.com/downloads.html
配置环境变量
VirtualBox: 需要将%VirtualBox_homt%添加到Path中。这样才能被Vagrant找到。
Vagrant: 安装成功后,自动在Path中添加%Vagrant_home%/bin,检查一下。
启动Vagrant
使用box方式安装系统:
box可以在http://www.vagrantbox.es/这里进行下载。
步骤
1、添加box
vagrant box add “centos-7.0va” E:\gulimall\vagrantfile\centos-7.0-x86_64.box
2、初始化box
vagrant init “centos-7.0va”
3、启动虚拟机
vagrant up
4、ssh远程虚拟机 (默认root密码是vagrant)
vagrant ssh
5、退出连接,关闭虚拟机
exit
vagrant halt
6、设置静态ip
su root
vagrant (密码)
(私有的网络)在Vagrantfile增加,然后启动虚拟机
config.vm.network “private_network”, ip: “192.168.56.100”
默认密码是vagrant
Vagrant常用介绍
vagrant box add "boxIdentity" remoteUrlorLocalFile 添加box
vagrant init "boxIdentity" 初始化box
vagrant up 启动虚拟机
vagrant ssh 登录虚拟机
vagrant box list 显示当前已添加的box列表
vagrant box remove "boxIdentity" 删除box
vagrant destroy 停止当前正在运行的虚拟机并销毁所有创建的资源
vagrant halt 关闭虚拟机
vagrant package 打包当前运行的虚拟机的环境
vagrant plugin 用于安装卸载插件
vagrant reload 重启虚拟机,主要用于重新载入配置文件
vagrant suspend 挂起虚拟机
vagrant resume 恢复挂起状态
vagrant ssh-config 输出ssh连接信息
vagrant status 输出当前虚拟机的状态
基本操作
在/下可以看到一个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。
网络设置
端口映射(Forwarded port)
顾名思义是指把宿主计算机的端口映射到虚拟机的某一个端口上,访问宿主计算机端口时,请求实际是被转发到虚拟机上指定端口的。Vagrantfile中设定语法为:
config.vm.forwarded_port 80, 8080
以上将访问宿主计算机8080端口的请求都转发到虚拟机的80端口上进行处理。
默认只转发TCP包,UDP需要额外添加以下语句:
config.vm.forwarded_port 80, 8080, protocol: "udp"
优点:
简单易理解
容易实现外网访问虚拟机
缺点:
如果一两个端口需要映射很容易,但是如果有有很多端口,比如MySQL,MongoDB,tomcat等服务,端口比较多时,就比较麻烦。
不支持在宿主机器上使用小于1024的端口来转发。比如:不能使用SSL的443端口来进行https连接。
私有网络(Private network)
只有主机可以访问虚拟机,如果多个虚拟机设定在同一个网段也可以互相访问,当然虚拟机是可以访问外部网络的。设定语法为:
config.vm.network "private_network", ip: "192.168.56.100"
优点:
安全,只有自己能访问
缺点:
因为私有的原因,所以团队成员其他人不能和你写作
公有网络(Public network)
虚拟机享受实体机器一样的待遇,一样的网络配置,vagrant1.3版本之后也可以设定静态IP。设定语法如下:
config.vm.network "public_network", ip: "192.168.0.66"
公有网络中还可以设置桥接的网卡,语法如下
config.vm.network "public_network", :bridge => 'en1: Wi-Fi (AirPort)'
优点:
方便团队协作,别人可以访问你的虚拟机
缺点:
需要有网络,有路由器分配IP
hostname设置
config.vm.hostname = "go-app"
host用于识别虚拟主机。特别在有多台虚拟机时,务必进行设置。
同步目录
除了默认的/vagrant同步目录外,还可以设置额外的同步目录:
config.vm.synced_folder "d:/local/dir", "/vm/dir/"
第一个参数是本地目录,第二个参数为虚拟机目录。
配置多台虚拟机:
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虚拟机)