一文学会轻松使用Vagrant

63 阅读4分钟

vagrant是一个命令行管理虚拟机的工具

镜像下载

cloud.centos.org/centos/10-s…

mirror.tuna.tsinghua.edu.cn/

vault.centos.org/5.10/

快速开始

0、安装vagrant和virtualBox

1、添加box到vagrant

将下载的box添加到vagrant中

vagrant box add {本地下载的box} --name {重新命名的box名称}

vagrant box add ~/Downloads/CentOS-8-Vagrant-8.1.1911-20200113.3.x86_64.vagrant-virtual
box.box --name centos-8

vagrant box list

2、初始化虚拟机

创建一个虚拟机目录,这个目录将作为虚拟机根目录,许多配置项都是相对于此目录的。同时在这个目录中将会生成一个Vagrantfile,这个Vagrantfile可以在项目组中共享,让每个开发者拥有同一套开发环境

进入这个目录(这个目录未来会默认作为共享文件夹,但是默认的rsync这种共享模式存在缺陷)

  • 同步是一次性的,即只有启动虚机的时候执行,也就是说改了代码必须要重启一次虚机
  • 单向的,即只能从宿主机同步到虚拟机,也就是说在虚机内的改动不会同步到外面
  • 需要拷贝文件,如果要同步的文件数量较多,会占用更多的磁盘空间

然后执行虚拟机初始化命令

vagrant init {box name}

会寻找对应的box并初始化,会优先寻找本地box目录下面的

vagrant init centos-8
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.

3、启动虚拟机

vagrant up

还可以指定虚拟服务提供方

vagrant up --provider=virtualbox

查看虚拟机状态

vagrant status 

4、访问虚拟机

vagrant ssh 连接到虚拟机

vagrant suspend 暂定

vagrant resume 恢复

vagrant halt 停止

vagrant reload 重启

vagrant destroy——删除虚拟机,但不会删除对应的box,因为多个项目会复用box。如果想删除box,可以使用以下命令

vagrant box remove {box name}

5、安装虚拟机增强

VirtualBox 的下载页面并没有直接给出 Guest Addtion 的下载链接,我们先在 VirtualBox 的任一下载链接上右键,复制链接地址,例如得到 https://download.virtualbox.org/virtualbox/6.1.6/VirtualBox-6.1.6-137129-Win.exe,去掉最后的文件名,把其中的路径 https://download.virtualbox.org/virtualbox/6.1.6/ 在浏览器中打开,就能看到所有可下载的版本,在其中找到 VBoxGuestAdditions_6.1.6.iso 直接下载。

6、镜像打包

执行镜像打包之前最好把虚拟机相关缓存清空,减少打出来包的大小

打出来的包就在当前虚拟机工作目录下

swapoff -a

rm -rf /swapfile 

yum clean all

vagrant package

打包之后,然后执行

vagrant box add {刚打好的包路径} --name dxx/centos8-base

下次创建虚拟机时使用下面的命令就可以使用本次打的package了

vagrant init dxx/centos8-base

7、使用ssh客户端连接虚拟机

vagrant创建的虚拟机默认只能通过private_key连接虚拟机,

vagrant ssh-config 查看ssh配置

以SecureCRT为例,可以配置登陆方式为identity方式,并指定上述命令看到的秘钥路径(IdentityFile路径)即可通过SecureCRT登陆了。

Vagrantfile

配置端口转发,可以在宿主机上直接访问虚拟机的服务

但是当有多台虚拟机时容易引起端口冲突

config.vm.network "forwarded_port", guest: 22, host: 2222, id: "ssh", disabled: "true"
config.vm.network "forwarded_port", guest: 22, host: 22222

配置私有网络

config.vm.network "private_network", ip: "192.168.10.10"

也可以直接使用DHCP,但是并不推荐

config.vm.network "private_network", type: "dhcp"

配置桥接网络

一般情况下用不上这种模式

config.vm.network "public_network"

共享文件

共享文件能够简化开发流程,本地开发,然后在虚拟机上运行服务。共享文件相当于在主机和虚拟机之间建立了双向同步,本地的变更可以直接体现在虚拟机上。当虚拟机被销毁时,宿主机上的共享文件仍然会完好无损。

更新Vagrantfile之后,可以运行以下命令使得配置脚本生效

vagrant reload --provision

如下将本地文件夹./terramino-go与虚拟机文件夹做共享

config.vm.synced_folder "./terramino-go", "/home/vagrant/terramino-go", create: true

指定共享模式

config.vm.synced_folder "../data", "/vagrant_data", type: "rsync"

《个人介绍》

大家还可以在以下平台关注我,查看更多作者的历史文章

1)欢迎关注

搜索框传播样式-标准色版.png