vagrant日常操作

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.box
    box:
==> 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中对应的hostname
  config.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-only
  config.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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vagrant是一个用于构建和管理虚拟开发环境的工具。它可以帮助开发人员快速创建、配置和共享可重复的开发环境。 要安装Vagrant,您可以按照以下步骤进行操作: 1. 首先,您需要下载并安装适用于您操作系统的Vagrant安装程序。您可以从Vagrant官方网站(https://www.vagrantup.com/)上找到适合您操作系统的安装程序。 2. 安装完成后,打开命令行终端(Windows用户可以使用PowerShell或Git Bash),运行以下命令来验证Vagrant是否成功安装: ``` vagrant --version ``` 如果成功安装,您将看到Vagrant的版本信息。 3. 接下来,您需要选择一个虚拟化提供程序来管理虚拟机。Vagrant支持多种虚拟化提供程序,如VirtualBox、VMware等。您可以根据自己的需求选择其中之一,并确保已经安装并配置好了该虚拟化提供程序。 4. 在选择好虚拟化提供程序后,您可以创建一个新的Vagrant项目。在命令行终端中,进入您想要创建项目的目录,并运行以下命令: ``` vagrant init <box> ``` 这里的`<box>`是指您想要使用的虚拟机镜像,也称为"box"。您可以在Vagrant官方网站的"Boxes"页面(https://app.vagrantup.com/boxes/search)上找到各种可用的box。 5. 运行上述命令后,Vagrant将在当前目录下创建一个`Vagrantfile`文件,该文件是Vagrant项目的配置文件。您可以根据需要编辑该文件,配置虚拟机的各种设置,如网络、共享文件夹等。 6. 最后,运行以下命令来启动虚拟机: ``` vagrant up ``` Vagrant将根据`Vagrantfile`中的配置信息创建和启动虚拟机。如果是第一次运行该命令,Vagrant可能需要下载并导入虚拟机镜像,这可能需要一些时间。 至此,您已经成功安装并配置了Vagrant。您可以使用`vagrant ssh`命令登录到虚拟机,并使用其他Vagrant命令来管理和操作虚拟机。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值