Vagrant简介

Vagrant 是一个用来构建和管理虚拟机环境的工具,实现配置运维自动化,支持virtualbox,vmware等常见hypervisor。

写这篇文章的目的主要是vagrant功能有很多,但我的日常工作基本只用到下面的部分,记录一下,供参考。

下面几个概念简单介绍一下方便理解:

  • box:相当于一个虚拟机镜像,可以通过本地文件,远程连接添加
  • vm:相当于虚拟机实例,如virtualbox虚拟机,vm都是基于某个box创建
  • Vagrantfile:一组(支持几个vm构成集群)vm的描述,包括其基于的box,网络模式,存储,共享目录,provider(hypervisor),配置(Shell,Puppet,Ansible,Chef,Salt等)等。

详细介绍见参考资料。

日常工作流

操作介绍

添加box

$ cd /drives/d/work/vagrant/boxes### 通过本地box文件添加
$ vagrant box add centos8_pg12 centos8_pg12.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos8_pg12' (v0) for provider:box: Unpacking necessary files from: file://D:/work/vagrant/boxes/centos8_pg12.boxbox:
==> box: Successfully added box 'centos8_pg12' (v0) for 'virtualbox'!$ vagrant.exe box list
centos8_pg12         (virtualbox, 0)      ### 通过远程连接添加
$ vagrant box add centos8_2011  https://mirrors.ustc.edu.cn/centos-cloud/centos/8/vagrant/x86_64/images/CentOS-8-Vagrant-8.3.2011-20201204.2.x86_64.vagrant-virtualbox.box

初始化Vagrantfile

## 为vm创建一个新的目录
$ mkdir /path/of/your/vm
$ cd /path/of/your/vm## init后分别为新vm的name,使用的box name
$vagrant init hgcndn-centos8 centos8_pg12
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.$ 

修改Vagrantfile

以下PRIVATE start/end之间的为推荐手动添加的选项。

> vi Vagrantfile
## 自定义的部分<PRIVATE start> <PRIVATE end>Vagrant.configure("2") do |config|config.vm.box = "centos8_pg12"# <PRIVATE start># set the hostname in vm# vm中对应的hostnameconfig.vm.hostname = "hgcndn-centos8"# the vm name used by vagrant# 一个vagrantfile中定义多个vm的话,通过指定名字可以单独控制# 比如指定某一vm进行up操作config.vm.define "hgcndn-centos8"# 指定磁盘大小(virtualbox中为动态扩展,这是上限值)# 需要安装插件,方法见插件安装部分config.disksize.size = '200GB'# this mapping to host-onlyconfig.vm.network "private_network", type: "dhcp"config.vm.synced_folder "D:/work/vagrant/data", "/vagrant_data"config.vm.provider "virtualbox" do |vb|vb.memory = "1024"# the vm name in virtualbox# 不指定的话会随机生成,在virtualbox中看起来不直观vb.name = "hgcndn-centos8"end# <PRIVATE end>
end

启动,配置vm

vagrant.exe up

ssh登录

$ cd /path/of/vm/dir/
## 默认用户名vagrant密码vagrant
$ vagrant ssh

插件安装

有的feature如指定disksize需要安装插件,默认会使用官方插件源,国内基本连不上,需要指定使用国内源


## vagrant-disksize为插件名称
$ vagrant plugin install  --plugin-source https://gems.ruby-china.com/ vagrant-disksize

常用插件

# 支持指定disksize
. vagrant-disksize# 支持共享目录
. vagrant-vbguest
. micromachine

虚拟机package为box

打包为box后,可用于作为模板创建新的vm,或者copy到别的vagrant环境下来创建vm,实现vm迁移(换电脑时vm搬家就用上了)。

$cd /drives/d/work/vagrant/vms/centos8_pg12
$vagrant.exe halt$vagrant package --output ../../boxes/centos8_pg12.box
==> centos8-pg12: Clearing any previously set forwarded ports...
==> centos8-pg12: Exporting VM...
==> centos8-pg12: Compressing package to: D:/work/vagrant/boxes/centos8_pg12.box

Trouble-shooting

up后ssh登录失败

现象

vagrant up
.....SSH auth method: password
Warning: Authentication failure. Retrying…

原因

Vagrantfile中指定了password,但是box中ssh设置不允许密码登陆

或者box中ssh允许密码登陆,但是Vagrantfile中没有指定password

  config.ssh.username = "vagrant"config.ssh.password = "vagrant"
# "/etc/ssh/sshd_config"
PasswordAuthentication no# service sshd restart

解决方案

针对以上情形,分别修改

. Vagrantfile中不要指定ssh的username,password

. Vagrantfile中指定ssh的username,password

MobaXterm中vagrant ssh失败

现象

vagrant.exe ssh
==> pg12: The machine you're attempting to SSH into is configured to use
==> pg12: password-based authentication. Vagrant can't script entering the
==> pg12: password for you. If you're prompted for a password, please enter
==> pg12: the same password you have configured in the Vagrantfile.
C:/HashiCorp/Vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/util/subprocess.rb:160:in `rescue in execute':  (216) (Vagrant::Util::Subprocess::LaunchError)from C:/HashiCorp/Vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/util/subprocess.rb:153:in `execute'from C:/HashiCorp/Vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/util/subprocess.rb:22:in `execute'
...

原因

未知

解决方案

通过下面方法ssh

# pg12对应vm的name
vagrant ssh-config  > ssh-config  && ssh -F ssh-config pg12

共享目录设置失败

现象

$vagrant up
...
unknown filesystem type 'vboxsf' after vagrant up

原因

缺少插件

解决方案

## vagrant-disksize为插件名称
$ vagrant plugin install --plugin-source https://gems.ruby-china.com/ vagrant-vbguest
$ vagrant plugin install --plugin-source https://gems.ruby-china.com/ micromachine

vm无法通过用户名密码登录

原因是vm中的sshd配置为不允许密码登录

解决方案

$ su
> vi /etc/ssh/sshd_config
PasswordAuthentication yes$ service sshd restart

vm,box占用C盘空间太多

详见我另一篇文章 修改vagrant,virtualbox数据目录

推荐box源

https://mirrors.ustc.edu.cn/centos-cloud/centos/8/vagrant/x86_64/images/

参考资料

Vagrant 入门指南_qhh0205的博客-CSDN博客_vagrant

CSDN

vagrant日常操作相关推荐

  1. Linux上的gitlab日常操作

    Linux上的gitlab日常操作 一.本地创建系统用户 1.创建zhangsan用户 2.创建数据存放目录 二.git用户信息配置 1.git信息配置 2.查看git信息状态 三.下载代码版本库 1 ...

  2. OCM备考 三. Managing Database Availability 之RMAN日常操作

    10 OCM考试大纲关于RMAN的考点: 三 Managing Database Availability ﹡ Create a recovery catalog database ﹡ Configu ...

  3. oracle vm virtualbox 虚拟光盘_虚拟机管理神器Vagrant完整操作手册来了

    一个只用markdown语法编写文章的90后野路子Web架构师,每天都分享一些有用的知识点,欢迎关注- 前言 1. 概述 本文主要整理了一些Vagrant常用操作.包括安装Vagrant.常用插件.B ...

  4. Unity3D之日常操作-Aspose.Words.dll-U3D读写word_文本内容写入

    记录日常操作. 网上没有找到相关内容,也没有搜索到Aspose提供的示例项目,可能是我没有仔细找的原因,无奈到Aspose官方找到脚本手册开始翻阅,最终的写出一下方法,还挺方便. dll: Aspos ...

  5. git公钥生成以及日常操作

    前言:由于公司来了几个新同事,在加上我长得帅(话多),自然就跟新同事很快的就相处下来了,我发现他们竟然都不会git,其实我也就会日常的add 到 push 再加上解决一切冲突问题,同事看我操作很6的样 ...

  6. python写闲鱼脚本_自动化篇 | 你想要的闲鱼日常操作,Python 给你实现了

    1 目 标 场 景 前篇文章讲了如何在 iOS 端使用 Airtest 实现自动化的操作,本篇将继续带大家做 iOS 端的自动化项目. 如果你经常用闲鱼,应该每天都要进行下面操作,App 签到.鱼塘签 ...

  7. 5800日常操作使用小技巧

    5800日常操作使用小技巧 2011年03月13日 S60机器的软件一般安装与删除方法 [1].为了顺利安装所有S60第三版机型适用的软件:在"工具"--"程序管理&qu ...

  8. 流动电影放映服务器维修,流动数字电影放映机的日常操作与维护

    朱吉任 当前,数字电影流动放映机已成为农村公益电影放映工程基层流动放映的主体设备.对于数字电影流动放映技术方面的培训应当提上议事日程,放映人员对数字电影流动放映设备的使用与维护的熟练的技能程度,合理维 ...

  9. 闲鱼python_自动化篇 | 你想要的闲鱼日常操作,Python 给你实现了

    image 阅读文本大概需要 8 分钟. 1.目 标 场 景 前篇文章讲了如何在 iOS 端使用 Airtest 实现自动化的操作,本篇将继续带大家做 iOS 端的自动化项目. 如果你经常用闲鱼,应该 ...

最新文章

  1. IDEA使用log4j
  2. Android老版本项目导入到新版SDK提示错误
  3. C#序列化与反序列化详解
  4. 日志分析系统分类有哪些_什么是网站日志分析需要分析哪些内容
  5. 导致jquery.min.map 404 (Not Found)错误的原因
  6. [ 转载 ] Java基础12--基础学习总结——数组
  7. ASP.NET MVC资源汇总(本文不断更新)
  8. 自学python需要安装什么-终于明白python需要学什么
  9. shell逻辑运算符优先级_逻辑运算符有那些?
  10. Spark开发指南(0.8.1中文版)
  11. 华为交换机默认用户名密码bootrom密码
  12. 曲线积分与曲面积分的计算机应用,曲线积分与曲面积分(解题方法归纳).doc
  13. 测井 时深转换 matlab,时深转换操作步骤.pdf
  14. 笔记本电脑CPU低压、标压、高压的区别
  15. 我的身体为什以会这样?如何诊治?
  16. 50个明星区块链项目跌破发行价,超10家项目几近归零
  17. 人工神经网络结构图高清,人工神经网络结构图解
  18. 阻止某个程序上网-------防止孩子看抖音快手等视频网站
  19. 2022年上半年,产品经理的55条心得总结!
  20. 二级c语言考试系统安卓,无忧考吧二级c语言考试系统下载_无忧考吧二级c语言考试系统官方下载-太平洋下载中心...

热门文章

  1. 事件循环机制EventLoop
  2. HTML表格边框个人总结
  3. 怎么查看linux中的环境变量,linux中查看环境变量的两种方法
  4. python的最佳开发工具_10款最佳Python开发工具推荐,每一款都是神器!
  5. RDkit四:数据处理过程中smiles编码的清洗统一化
  6. java在线电影网站
  7. 用Verilog实现60秒倒计时时钟
  8. 电脑文件建立软连接的方法
  9. 华云数据喜获“Cloud100 医疗云服务商及金融云服务商”双项殊荣
  10. 对比JIT和AOT,各自的优点与缺点