Vagrant 简介和基础使用

Vagrant 实际上一套虚拟机管理工具,基于 Ruby 开发,底层支持 VirtualBox、VMware 甚至 AWS、Docker 等做为虚拟化系统。咱们能够经过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员能够在本身喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,“代码在我机子上运行没有问题”这种说法将成为历史。linux

Vagrant 自己并无能力建立虚拟机,它是调用一些虚拟化工具来建立,如 VirtualBox, VMWare,甚至 AWS。ios

box

  1. 可被Vagrant直接使用的虚拟机镜像文件
  2. 基于不一样虚拟化技术打包的box是不同的

    clipboard.png

  3. http://www.vagrantbox.es

安装

vagrant 支持在线安装,可是鉴于 GFW 的缘由,国内用户使用的时候最好先在 http://www.vagrantbox.es 下载好要使用的 box在本地安装nginx

# vagrant box 放在 ~/precise64.box

$ mkdir vagrant && cd vagrant
$ vagrant box add base ~/precise64.box
$ vagrant init (boxname)

basebox的名称,能够是任意的字符串,base 是默认名称,主要用来标识一下你添加的 box,后面的命令都是基于这个标识来操做的。docker

配置

$ vim Vagrnatfile

网络模式

  • 端口映射shell

    config.vm.network “forwarded_port", guest: 80, host: 8080
    guest: 80 表示虚拟机中的80端口, host: 8080 表示映射到宿主机的8080端口
  • __私有网络__(等效于设置virtualbox使用host-only模式网络适配器),本身自由的访问虚拟机,可是别人不须要访问虚拟机apache

    config.vm.network “private_network", ip: "192.168.33.10"
    192.168.33.10 表示虚拟机的IP,多台虚拟机的话须要互相访问的话,设置在相同网段便可
  • __公有网络__(等效于设置virtualbox使用bridged模式网络适配器),若是须要将虚拟机做为当前局域网中的一台计算机,由局域网进行DHCPvim

    config.vm.network “public_network"

目录映射

将本地的目录映射到虚拟机的对应目录,能够同时映射多个目录windows

config.vm.synced_folder "/Users/wangkun/www", "/vagrant_data"

前边的参数是本地目录,后边是映射目录缓存

系统会自动映射宿主机当前目录到虚拟机根目录的 /vagrant安全

在该虚拟机上进行 rm -rf操做的时候请谨慎一些,由于在虚拟机中最少也会挂载/vagrant目录,该目录是与你主机的项目共享的,删除的话会将项目删除掉。

启动脚本(非必须)

若是有须要在启动时运行一些脚本,能够编辑脚本,相似以下(摘自 Vagrant Document):

#!/usr/bin/env bash
$ apt-get update
$ apt-get install -y apache2
$ rm -rf /var/www
$ ln -fs /vagrant /var/www

保存在和Vagrantfile相同目录,文件名自取(如 boot.sh),而后在Vagrantfile中添加:

config.vm.provision :shell, :path => "boot.sh"

其余设置

设定VM的名称和内存大小等等

config.vm.provider "virtualbox" do |vb|
  vb.customize ["modifyvm", :id,
                "--name", "dev",
                "--cpus", "1",
                "--memory", "512"]
end

这行设置的意思是调用VBoxManagemodifyvm的命令,设置VM的名称为devcpu为1个核心,内存为512MB。你能够相似的经过定制其它VM属性来定制你本身的VM

启动并使用

$ vagrant up
$ vagrant ssh

os xlinux 下能够直接使用这个命令登陆,windows下须要第三方软件支持,win10正式版PowerShell也将支持 SSH

经常使用命令

# 启动虚拟机
$ vagrant up

# 关闭虚拟机——对应就是关机
$ vagrant halt 

# 从新加载配置文件并启动,不会执行启动脚本
$ vagrant reload

# 从新加载配置文件并启动,强制执行启动脚本
$ vagrant reload --provision

# 暂停虚拟机——只是暂停,虚拟机内存等信息将以状态文件的方式保存在本地,能够执行恢复操做后继续使用
$ vagrant suspend

# 恢复虚拟机 —— 与前面的暂停相对应
$ vagrant resume

# 删除虚拟机,删除后在当前虚拟机所作进行的除 Vagrantfile 中的配置都不会保留
$ vagrant destroy

# 能够看到虚拟机的状态,这个状态是被缓存起来的,可能不必定准确
$ vagrant global-status

# 刷新状态
$ vagrant global-status --prune

# 显示box列表
$ vagrant box list

打包

$ vagrant package --output NAME --vagrantfile FILE

可选参数:

--output NAME : (可选)设置经过 NAME 来指定输出的文件名

--vagrantfile FILE:(可选)能够将 Vagrantfile 直接封进 box 中

注:若是网络模式中使用 private_network 的话,在打包以前须要清除一下private_network的设置,避免没必要要的错误:

sudo rm -f /etc/udev/rule.d/70-persistent-net.rules

制做完成以后直接将box文件拿到其余计算机上配置便可使用。

多个VM的配置和启动

vagrant支持在一个Vagrantfile中配置多个VM

单个 Vagrantfile

  • 各个VM的配置和启动都相对独立,如vagrant ssh时可不指定VM名。
  • Vagrantfile也不至于经常要改

多个 Vagrantfile

  • 一个Vagrantfile收录了整个大环境中全部VM的基本配置,一眼就知道环境里共有哪些VM,也不须要切换目录来检查各VM的状态,跟不会搞混了目录“丢掉”哪一个倒霉的VM
  • 更多地使用Chef/Puppet来配置各VM,好比把VMip配置从Vagrantfile后推到puppet进行,保持Vagrantfile的简洁。目的是在对本地环境的VM配置,甚至生产环境的节点配置上,保持较高的一致性,有利于统一部署方式。

注意事项

  1. vagrant启动报错的时候尝试用VirtualBox启动,可能会直接弹出VT-x is disabled in the BIOS. (VERR_VMX_MSR_VMXON_DISABLED)这个错误,这是由于没有开启宿主机的虚拟化,重启宿主机进入bios,开启virtualiation选项便可
  2. HTTP服务器静态资源缓存问题,这个我没遇到

    //nginx
     sendfile off;
    
     //apache
     EnableSendfile off
  3. Vagrant 默认启动超时时间是300S,若是启动超时能够配置

    config.vm.boot_timeout = 1000

Vagrant 和 Docker 的区别

Vagrant

  • Vagrant 用来构建并运行基于 lxc(内核虚拟化技术) 的虚拟 Linux 容器
  • 易于配置、可量产、而且可移植的工做环境,而且由一个统一的工做流程进行控制
  • 在硬件级别分配资源,支持部署 Linux,Unix,Windows
  • 启动较 Docker 稍慢一些
  • 有点笨重,可是仍然比完整的虚拟机来得好,其余有点:同时支持和一些配置工具(如 Puppet,Chef)集成

Docker

  • Docker 基于 Linux 虚拟机的虚拟环境(Virtual Environment)工具。
  • 在软件级别分配资源,支持部署 Linux,Unix,Windows
  • 启动只需几秒钟,所建立的虚拟机的隔离级别和安全性:部分
  • 轻量级,其余有点:快速,易于学习
  • Vagrant 如今也具备一个 Docker 提供商,所以您能够用 Vagrant 来管理 Docker 的构建和部署

做者怎么说?

相关文章
相关标签/搜索