热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

vagrant的介绍与使用

什么是vargrant?vagrant是一个构件虚拟开发环境的工具。他用于创建部署虚拟的开发环境;白话:使用vagrant来创建和管理虚拟机的,而装虚拟机的文件由运维组对开发环境做

什么是vargrant?

vagrant是一个构件虚拟开发环境的工具。他用于创建部署虚拟的开发环境;

白话:使用vagrant来创建和管理虚拟机的,而装虚拟机的文件由运维组对开发环境做的一个box的镜像。 

这样做的目的,省去了我们搭建开发环境,直接装一个虚拟机,把正在使用的开发环境的镜像还原进去。 

当然使用vagrant最主要解决的一个问题就是,让开发环境同步。“代码在我机子上运行没有问题”这种说辞将成为历史。

看下图,其中,第一种是直接在物理机上装 Hypervisor,然后再该层上安装我们自己的虚拟机,第二种是先在物理机上装任意一个操作系统,然后在此基础上安装 Hypervisor,再然后再该层上安装我们自己的虚拟机,我们大部分用 Vmware 都是第二种,Vagrant就是第一种,微软自带的hyper-v ;

 

vagrant 的构成



  • base box:vagrant使用的基础镜像文件,可以理解为Vagrant中使用的Linux的镜像文件;

  • providers:镜像文件安装在哪个虚拟机上,vagrant 必须依赖于 Provide,Provide有:vmware、virtualbox、hyper-v,其中,vmware是收费,vartualbox是免费,推荐、hyper-v是微软自带的;

  • provisioners  启动时、启动后,去执行一些shell脚本(如配置网络、安装软件环境等)

 

Vagrant 和 Docker 有什么区别?

Vagrant 对应的是VM层面的,而Docker对应的是Container

 

vagrant安装

1、安装 providers,你有两种选择,vritualbox 和 hyper-v,如果你是window10及以上系统,那么建议使用hyper-v,否则请您使用 vartualbox

  如果是用微软自带的hyper-v,则你需要看:https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/about/;

  如果你是用virtualBox,则你需要安装它,https://www.virtualbox.org/wiki/Downloads;vmware因为收费不推荐;

2、安装vagrant,https://www.vagrantup.com/downloads.html

检查是否成功安装:vagrant --version

 

通过vagrant安装box镜像

离线方式(强烈推荐)

1、下载box文件

vagrant部署环境时,需要一个box文件。如果是在公司里面,可以从他们那里拷一个box文件安装。这样安装的环境与他们是一致的。即模拟了一个开发环境。box文件也可以在网上下载。如:

在 http://www.vagrantbox.es/  或 https://app.vagrantup.com/boxes/search 上找到适合你自己的box,然后将box文件下载下来;

 

2、把box文件添加到虚拟机

新建一个目录,将下载好的box镜像文件丢入里面,在里面用poershell运行(需要管理员身份运行):

//添加box镜像文件到虚拟机中
vagrant box add centosMix CentOS-7.1.1503-x86_64-netboot.box --provider=[hyperv|vertualbox]

 或者你也可以不用下载下来,而是通过:

vagrant box add centosMix https://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7.box

 

 

3、初始化虚拟机box文件

# centosMix 是上面命令中我们自定义的虚拟机名称
vagrant init centosMix

执行完上面的命令之后,可以在目录下看到一个已经生成的vagrantFile文件。这是一个配置文件,里面包含该虚拟机的一些配置信息,其实就几行而已,你可以去掉注释后看到。 

 

4、启动虚拟机

vagrant up --provider=hyperv --color # 注意,安装到hyper上而不是virtualbox中
如果是 用virtualbox虚拟机的话,就写成:
vagrant up --provider=virtualbox --color

 注意输出的信息,一般的,virtualbox的ip为127.0.0.1 端口为2222,而hyperv的ip为其显示的ip,端口是22;

 判断是否成功安装:vagrant status

 

进行完上面步骤后,就可以像使用服务器一样,远程到虚拟机了。可以使用的工具有xshell工具,winscp等工具。

初始安装的时候后,远程的时候,使用的IP是127.0.0.1 端口号是2222(看输出信息知道的)。这些信息可以后续在进行设置。如果嫌麻烦,也可以修改vagrantFile文件之后,在进行安装。默认中的账号密码都为:vagrant

 

在线方式(国内用户不推荐)

 

常用命令

vagrant up

启动或创建(第一次)虚拟机

vagrant stauts

检查虚拟机状态

vagrant ssh

通过ssh连接

 

vagrant ssh-config

查看ssh配置信息

 

vagrant suspend/resume/reload/hat

暂停suspend / 重启resume、重载reload、停止halt(停止的虚拟机需要 up 启动)

vagrant destroy

删除/移除 虚拟机

vagrant destroy -f 强制删除所有虚拟机

 

已经删除的虚拟机,其所在的目录中的 .vagrant 也最好删除掉;

.vagrant 的目录结构

> tree /F
D:.
│ Vagrantfile

└─.vagrant
├─machines 虚拟机目录
│ └─default 我们创建的虚拟机名称,默认为default
│ └─hyperv 我们default虚拟机provider,为 hyperv,即:default虚拟机是通过 hyperv 创建的
│ │ action_configure
│ │ action_provision
│ │ action_set_name
│ │ box_meta
│ │ creator_uid
│ │ id
│ │ index_uuid
│ │ private_key ssh的登陆密钥key
│ │ synced_folders
│ │ vagrant_cwd
│ │
│ └─Virtual Hard Disks 虚拟机的磁盘文件
│ generic-ubuntu2004-hyperv.vhdx

└─rgloader
loader.rb

 

Box 文件目录在哪儿?

一般在 用户目录下的 .vagrant.d 目录中:

C:\Users\用户名\.vagrant.d\

 

C:\Users\用户名\.vagrant.d>tree /F
C:.
│ insecure_private_key
│ setup_version

├─boxes // box就存放在这里
│ ├─hyperv
│ │ └─0
│ │ └─hyperv
│ │ │ info.json
│ │ │ metadata.json
│ │ │ Vagrantfile
│ │ │
│ │ ├─Virtual Hard Disks
│ │ │ generic-ubuntu2004-hyperv.vhdx
│ │ │
│ │ └─Virtual Machines
│ │ box.xml
│ │ D90B1531-23A2-4D41-957F-8593E9356E69.vmcx
│ │ D90B1531-23A2-4D41-957F-8593E9356E69.vmgs
│ │ D90B1531-23A2-4D41-957F-8593E9356E69.VMRS
│ │
│ └─ubuntu
│ └─0
│ └─hyperv
│ │ info.json
│ │ metadata.json
│ │ Vagrantfile
│ │
│ ├─Virtual Hard Disks
│ │ generic-ubuntu2004-hyperv.vhdx
│ │
│ └─Virtual Machines
│ box.xml
│ D90B1531-23A2-4D41-957F-8593E9356E69.vmcx
│ D90B1531-23A2-4D41-957F-8593E9356E69.vmgs
│ D90B1531-23A2-4D41-957F-8593E9356E69.VMRS

├─data
│ │ checkpoint_cache
│ │ checkpoint_signature
│ │ lock.dotlock.lock
│ │
│ └─machine-index
│ index
│ index.lock

├─gems
│ └─2.7.4
├─rgloader
│ loader.rb

└─tmp
boxe1394d60c23f1a8b64cfb37d8591b8a521b31cdf

 

 

vagrantfile文件的写法

 

box的名称为 centos/7

安装后设置其hostname为vagrant-demo

 

安装的box版本为1905.1(注意:如果本地不存在该版本,会从网上拉取下来)

每次配置 vagrantfile 好后,需要重新创建vagrant;

更多配置前往:https://www.vagrantup.com/docs/vagrantfile 查看

 

vagrant的ssh连接

我们可以在 vagrantfile 目录下使用命令 vagrant ssh 来登陆我们的虚拟机而不需要输入用户名和密码,这是为什么?

执行vagrant ssh 命令后,vagrant会找 当前目录的.vagrant目录中的private.key文件,来登陆对应的虚拟机;注意:public.key 在创建linux时被注入到linux中了;

你也可以通过 vagrant ssh-config 来查看当前所在的虚拟机的信息;

 

有些时候,我们需要通过用户名密码来登陆虚拟机中,而vagrant在安装虚拟机时应将使用密码来登陆的功能禁用了,vagrant的本意就是建议我们最好通过private_key来登陆虚拟机,但是我们就像用密码,如何设置?

1、先用 vagrant ssh 登陆我们的虚拟机中(也就是先用 private_key 登陆我们的虚拟机)

2、在虚拟机中的 /etc/ssh/sshd_config 中,将 PermitRootLogin由no改为yes,保存

3、重启sshd服务:sudo service sshd restart

4、完毕,你可以退出,然后使用账号密码(都为vagrant)登陆到虚拟机了;

但是,我们还是建议你在生产环境中使用private_key来登陆到虚拟机中;

 

使用ssh的技巧(推荐设置)

我们输入 vagrant ssh-config 命令,输出的内容是可以被我们的ssh所使用的,也就是说,在任何目录中都能够快速的登陆到我们虚拟机中,而不需要先进入到 vagrantfile 目录中;

 

在  C:\Users\用户名\.ssh\ 目录中,新建一个 config 文件(如果不存在,注意没有文件名后缀),将上面红色框起来的内容复制到 config 文件中,修改 第一行 Host default,default 可以改为你熟悉的名字,比如这里是 hlinux;

这样,你就可以在任何目录中使用  ssh hlinux 来直接登录到虚拟机中了;

注意:hyper-v 新建的虚拟机的ip地址是不固定的,可能会在你重启电脑的时候变动,这时候使用 ssh hlinux 就无法登陆到虚拟机了,记得改ip即可;

 

insecure_private_key

所有创建出来的虚拟机,都可以使用 insecure_private_key 来连接到虚拟机中(vagrant在安装虚拟机的时候创建一个public_key安装在虚拟机中,对应的private_key就是:insecure_private_key  了);

insecure_private_key文件 存在哪里?

C:\Users\用户名\.vagrant.d\ 下

但是,我们并现在并不能通过 insecure_private_key 来连接到虚拟机,因为在你安装虚拟机时,vagrant会自己生成一个 一对private_key 和 public_key,public_key 注入到虚拟机,private_key 替换 insecure_private_key 了,如下图:

每台虚拟机目录中都有自己的 private_key文件:

而我想要的是以后所有创建出来的虚拟机都是用统一的 insecure_private_key 来登录,如何做?要想禁止 vagrant 去生成每个虚拟机自己的 key,就想是用 insecure_private_key,可以在每个 vagrantfile 中添加一句话:

这样,每次通过这个 vagrantfile 来生成虚拟机时,都不会生成自己独有的 key,而是使用统一使用 insecure_private_key 文件来登录到虚拟机中;

 

上图中已经没有 生成替换使用自己的key的信息了;

 

insecure_private_key 对应的 public_key 在虚拟中哪里呢?/home/vagrant/.ssh/authorized_keys,如下图:

 

 

一个vagrantfile创建多台虚拟机并对每个虚拟机单独设置

 

 

上图中配置了需要创建了两台虚拟机,第一台名为 web,且设置hostname和box_version,第二台名为 db,只设置了hostname,box_version将会使用全局的 1905.1 这个版本;

 

使用循环来设置多台虚拟机(更加灵活)

 

 

hyper-v 同步文件夹

 

宿主机的Vagrantfile所在的当前目录同步到虚拟机中的 /vagrant 目录中,同步的类型为smb

下面代码,是适配了 用 virtualbox 和 hyperv 两种provider的文件同步:

 

vagrant box 的操作(重要)

vagrant box 的存放是在:C:\Users\用户名\.vagrant.d\ 下的;

命令:

 

vagrant box list     列出所有已经安装的box

vagrant box add centos/7    下载 centos/7 这个box

vagrant box remove centos/7 [--provider=hyperv]   删除centos/7这个box

 



推荐阅读
author-avatar
mobiledu2502936451
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有