一、介绍

Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统,使用 Chef 创建自动化虚拟环境。同时,Vagrant也支持其他类型的虚拟机系统,例如 kvm, vmware,甚至是容器系统,例如docker,等等。

可以使用Vagrant来干如下这些事:

  • 建立和删除虚拟机
  • 配置虚拟机运行参数
  • 管理虚拟机运行状态
  • 自动配置和安装开发环境
  • 打包和分发虚拟机运行环境

二、安装Vagrant

Vagrant 可以使用不同的后端虚拟机,例如 virtualbox,vmware,kvm,qemu 等。

三、安装到Windows

下载 安装 VirtualBox :https://www.virtualbox.org/

下载安装 Vagrant :http://www.vagrantup.com/

下载所需的 Boxes :http://www.vagrantbox.es/

首先依次安装 Virtualbox 和 Vagrant,视情况重启系统。

四、准备Boxes

Vagrant 的 box,是一个打包好的单一文件,其中包含了一个完整系统的虚拟机相关数据。

添加box的方法很简单,例如Ubuntu 的box:

vagrant box add ubuntu/xenial64 ubuntu-xenial64-20170503.1.0-virtualbox.box

vagrant box add ubuntu/trusty64 ubuntu-trusty64-20170424.0.0-virtualbox.box

可以直接添加box,vagrant会尝试自动下载:

vagrant box add chef/centos-6.5

或者在初始化新vm时直接指定来源地址:

vagrant init ubuntu/trusty64 https://atlas.hashicorp.com/ubuntu/boxes/trusty64

查看所有已经添加的boxes:

vagrant box list

五、基本操作

首先,需要建立一个工作目录;

    cd %HOME%
mkdir -p vms\first-vm
cd vms\first-vm

然后,初始化操作系统:

vagrant init ubuntu/xenial64

启动虚拟机并使用:

vagrant up         #启动虚机
vagrant halt #停止虚机
vagrant destroy [-f] #删除虚机

六、Vagrant常用命令

vagrant init [name [url]]        # 初始化当前目录到 vagrant 环境
vagrant up # 启动虚拟机
vagrant halt # 关闭虚拟机
vagrant reload # 重启虚拟机
vagrant status # 查看虚拟机运行状态
vagrant destroy [-f] # 销毁当前虚拟机(但不删除Vagrantfile)
vagrant suspend # 挂起当前虚拟机
vagrant resume # 恢复被挂起的vm vagrant ssh # SSH 登录至虚拟机 vagrant box add ADDRESS # 安装box文件/url到本地
vagrant box list # 列出所有本地已安装的box列表
vagrant box outdated # 检查已安装的box是否有更新的版本
vagrant box remove NAME # 删除某个已安装的box vagrant package # 打包当前虚拟机环境为box文件以用于分发
vagrant plugin # 安装卸载vagrant插件
vagrant provision # 执行专门的环境初始化脚本
vagrant ssh-config # 输出ssh连接的一些信息
vagrant version # 获取vagrant的版本

七、Vagrantfile

7.1 box

config.vm.box = "ubuntu/xenial64"

指定操作系统。

对于 VirtualBox来说,它提供了 VBoxManage 命令行工具可以针对某个 VM 做很多事,modifyvm 就是一条可以修订 VM 配置参数的子命令。而Vagrant也可以在配置文件 Vagrantfile 中操作 virtualbox 以达到类似的目的。例如:

  config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "bastion", "--memory", "2048"]
end

7.2 网络设置

默认情况下,vagrant通知provider创建 NAT 类型的网卡,这样虚拟机将能够和主机之间相互通讯,同时VM能够借助宿主机的外网环境直接访问公网。

在这种情况下,我们可以指定VM的端口转发来暴露VM中的应用程序的端口,从而在宿主机上可以直接与该端口进行通信。

config.vm.network "forwarded_port", guest: 80, host: 8080

例如,我们在VM中安装了nginx的话,上面的端口转发设定可以将其暴露为宿主机的 :8080 ,这样我们从宿主机或者内网的其他主机都可以访问VM中的nginx服务了。

7.3 同步文件夹

config.vm.synced_folder "../data", "/vagrant_data"

将宿主机的 VM工作目录/…/data 映射为 VM中的 /vagrant_data。

7.4 使用ruby循环语句建立多个 VMs

(1..3).each do |i|
config.vm.define "node-#{i}" do |node|
node.vm.provision "shell",
inline: "echo hello from node #{i}"
end
end

7.5 替换 VM 的 Locale

一般情况下,SSH会话沿用宿主机控制台的Locale,但你可以通过预定义覆盖它,在会话中总是使用特定的语言:

ENV["LC_ALL"] = "en_US.UTF-8"

Vagrant.configure("2") do |config|
# ...
end

7.6 Provisioning

,Provisioning是一个首次启动时的后初始化点,它发生在 VM 操作系统被安装就绪,并首次启动完成时。你可以编写 Shell 脚本在这个点自动完成你的专属环境初始化动作,例如安装标准服务、安装bash扩展组件(例如git-prompt)、建立必要的工作文件夹和拉取特定的分发包之类。

如果有必要,在今后,即使VM已经完成了首次初始化了,你也可以通过 vagrant up --provision 这样的指令来强制 VM 开机和再次执行 Provisioning 脚本。

在 Vagrantfile 中,典型地可以这样指定 Provioning:

$script = <<-SCRIPT
echo I am provisioning...
date > /etc/vagrant_provisioned_at
SCRIPT Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: $script
end

也可以指定一个脚本文件,注意我们通过 /vagrant 传递 provision.sh 到 VM 中,而典型的 box 系统中,/vagrant 是在 $PATH 搜索路径中的:

Vagrant.configure("2") do |config|
config.vm.provision "shell", path: "provision.sh"
end

Vagrant基本知识、基本操作的更多相关文章

  1. vagrant 入门

    0.说明 本门所有的操作都是基于mac.windows可做相应调整,大体流程是一样的. 1.什么是vagrant 通俗来讲vagrant是一个通过命令行,来管理虚拟机的工具,vagrant本身并没有提 ...

  2. Vagrant 总结

    引言   本文将讨论Vagrant基础应用,高级应用,基于Vagrant 的虚拟机优化,Vagrant的优势及区别等四部分   参考资料: [阿里云教程中心]Docker学习总结之Docker与Vag ...

  3. 使用 Vagrant 搭建 Kubernetes 本地测试环境

    Vagrant 中文资料 参考资料 Kubernetes 需要一个至少包含三个节点的分布式系统.如果想学习 Kubernetes,或只是在本地搭建测试环境,则可以通过 Vagrant 来简单的实现. ...

  4. 爬虫基础01-day23

    写在前面 上课第23天,打卡: 每天进步一点,开心一点   ^_^ 爬虫 - 基本操作 概要: - 发送Http请求,Python Http请求,requests - 提取指定信息,Python 正则 ...

  5. SQL server2005学习笔记(一)数据库的基本知识、基本操作(分离、脱机、收缩、备份、还原、附加)和基本语法

    在软件测试中,数据库是必备知识,假期闲里偷忙,整理了一点学习笔记,共同探讨. 阅读目录 基本知识 数据库发展史 数据库名词 SQL组成 基本操作 登录数据库操作 数据库远程连接操作 数据库分离操作 数 ...

  6. SQL server学习(一)数据库的基本知识、基本操作(分离、脱机、收缩、备份、还原、附加)和基本语法

    在软件测试中,数据库是必备知识,共同探讨. 阅读目录 基本知识 数据库发展史 数据库名词 SQL组成 基本操作 登录数据库操作 数据库远程连接操作 数据库分离操作 数据库脱机.联机操作 数据库收缩操作 ...

  7. PostgreSQL基础知识与基本操作索引页

    磨砺技术珠矶,践行数据之道,追求卓越价值 返回顶级页:PostgreSQL索引页 luckyjackgao@gmail.com 本页记录所有本人所写的PostgreSQL的基础知识和基本操作相关文摘和 ...

  8. SQL server学习(一)数据库的基本知识、基本操作和基本语法

    在软件测试中,数据库是必备知识,假期闲里偷忙,整理了一点学习笔记,共同探讨. 阅读目录 基本知识 数据库发展史 数据库名词 SQL组成 基本操作 登录数据库操作 数据库远程连接操作 数据库分离操作 数 ...

  9. 知识图谱和neo4j的基本操作

    一.知识图谱的简介 1.知识图谱是什么 知识图谱本质上是语义网络(Semantic Network)的知识库 可以理解为一个关系图网络. 2.什么是图 图(Graph)是由节点(Vertex)和边(E ...

随机推荐

  1. 破解版IDM使用问题

    正版的IDM一般下载安装后有30天的免费使用期,过了就需要买正版序列号才能使用,网上一般提供的破解版的IDM安装后又存在无法添加到chrome插件的问题 这里针对这个问题给出解决方案: 首先下载破解版 ...

  2. DNS主从服务器配置实现

    主服务器-centos7-IP:192.168.184.201 从服务器-centos7-IP:192.168.184.202 客户端-ubuntu1804-IP:192.168.184.150 ①客 ...

  3. JAVA JVM助记符

    ldc:将int/float/String类型的常量值从常量池中推送至栈顶(栈顶的值是即将要用的) bipush:将单字节(-128 ~ 127)的常量值从常量池中推至栈顶 sipush:将一个短整型 ...

  4. android stdio 打包

    1.Build -> Generate Signed APK...,打开如下窗口 2.假设这里没有打过apk包,点击Create new,窗口如下 这里只要输入几个必要项 Key store p ...

  5. HIve中 datediff,date_add和date_sub的用法

    1.日期比较函数:datediff语法:datediff(string enddate,string startdate) 返回值:int 说明:返回结束日期减去开始日期的天数. 例如: hive&g ...

  6. NC65在日常开发中常用的代码写法

    标题 NC65开发相关代码 版本 1.0.1 作者 walton 说明 收集NC在日常开发中常用的代码写法,示例展示 1.查询 1.1 通过BaseDAO查询结果集并转换 //通过BaseDAO进行查 ...

  7. Dota游戏匹配的所有组合

    在Dota游戏中有一种匹配玩法,任意5人以下玩家组队,加入匹配系统,由系统组合出5人 vs 5人的组合进行游戏,比如2人+3人  vs 1人+4人.抽象出这个问题,就变成两边各有m个玩家,最多允许n个 ...

  8. 【SpringMVC】SpringMVC 响应数据

    SpringMVC 响应数据 文章源码 返回值分类 返回值是字符串 Controller 方法返回字符串可以指定逻辑视图的名称,通过视图解析器解析为物理视图的地址. @Controller @Requ ...

  9. C++中的extern“C”

    首先引入extern"C"的官方解释 extern "C" is meant to be recognized by a C++ compiler and to ...

  10. STM32驱动LCD实战

    前段时间写了<STM32驱动LCD原理>和<STM32的FSMC外设简介>两篇文章,本文将对STM32驱动LCD进行实战应用.LCD是深圳市拓普微科技开发有限公司的LMT028 ...