开始使用vagrant

vagrant是什么?

vagrant是虚拟机的配置管理工具。
其工作原理就是将一个运行于虚拟主机平台(Virtual Box、VMware、 Hyper-V、Docker)的操作系统及其环境打包成.box 文件,然后分发,使用者下载.box文件后可以通过vagrant提供的方式快速创建出一个可配置的操作系统环境。
vagrant的强大在于其提供方便的可配置接口。通过配置文件可以快速创建多个虚拟机,创建完成就可以使用。


Vgrant安装配置

安装VirtualBox

安装Vagrant

安装vargant 版本:1.8.1 https://www.vagrantup.com/downloads.html

Vagrant配置

.box文件怎么获得
添加box

添加box命令:

vagrant box add base /path/to/xxx.box

其中[base]是添加到本地后box的标志名称
添加后box中的镜像文件被放到了:~/.vagrant.d/boxes/

初始化box

创建一个工作目录:

mkdir -p ~/code/vagrant
cd ~/code/vagrant
vagrant init [name]

name 就是上一步添加box时设置的标志名,如果不填写,vagrant会根据默认的名称为base的box初始化
执行完init命令之后就会在~/code/vagrantVagrantfile文件

编辑配置文件Vagrantfile
Vagrant.configure(2) do |config|
config.vm.box = "base"
config.vm.network "private_network", ip: "33.33.33.33"
config.vm.synced_folder "DIRA", "DIRB"
config.ssh.username = "sshusername"
config.ssh.password = "sshpassword"
end

如果你是从http://www.vagrantbox.es/ 下载的box,ssh用户名和密码默认是vagrant, config.ssh.usernameconfig.ssh.password这两项不用配置
DIRA:宿主机上需要共享的目录
DIRB:虚拟主机目录
这是一个简单的配置,详细请看配置文件详解

启动

在目录~/code/vagrant下执行 vagrant up

使用

vagrant ssh执行后 快速进入虚拟主机

常用vagrant命令

  • vagrant box add 添加box
  • vagrant init 初始化box
  • vagrant up 启动虚拟机
  • vagrant ssh 登录虚拟机
  • vagrant box list 显示当前已经添加的box列表
  • vagrant box remove deve 删除名称为deve的box
  • vagrant destroy 停止当前正在运行的虚拟机并销毁所有创建的资源,即销毁一个虚拟机
  • vagrant halt 关闭虚拟机
  • vagrant reload 重启虚拟机,修改Vagrantfile后需要重启
  • vagrant suspend 挂起当前虚拟机
  • vagrant resume 恢复被挂起的虚拟机
  • vagrant package 打包当前虚拟机,创建box命令

配置文件详解

https://www.vagrantup.com/docs/vagrantfile/

config.vm

config.vm.box 配置使用box名称
config.vm.boot_timeout vagrant等待虚拟机启动时间,默认300s
config.vm.communicator 连接box方式 默认ssh
config.vm.guest 默认linux,配置客户机类型
config.vm.hostname 配置虚拟机的主机名称
config.vm.network 两种网络连接方式private_networkpublic_network,第一种配置虚拟机只能和客户机通讯,外网无法访问,第二配置虚拟机完全暴露在互联网。
config.vm.provider 虚拟机提供者配置
config.vm.provision 配置管理工具,通常用来安装一些软件
config.vm.synced_folder 配置共享目录

配置多个虚拟机

使用 config.vm.define

Vagrant.configure("2") do |config|
config.vm.define "web" do |web|
web.vm.box = "apache"
web.vm.network "private_network", ip: "33.33.33.33"
end

config.vm.define "db" do |db|
db.vm.box = "mysql"
db.vm.network "private_network", ip: "33.33.33.34"
end
end

访问不同虚拟机 vagrant ssh webvagrant ssh db
也可以直接用ip访问。