使用Vagrant快速搭建centos虚拟机

在这里插入图片描述
Vagrant 是一个管理虚拟机环境的工具 。它能帮助开发人员迅速的构建一个开发环境,帮助测试人员构建测试环境。

Vagrant 底层支持VirtualBoxVMware甚至AWS作为虚拟机系统,这里使用VirtualBox来进行说明,所以第一步需要先安裝VagrantVirtualBox

安装VirtualBox

VirtualBox是Oracle开源的虚拟化系统,到 VirtualBox 官网 下载 VirtualBoxvirtualBox 的安装十分简单,直接略过。

安装Vagrant

Vagrant官网 根据自己系统选择对应版本下载并安装,安装过程十分简单,直接下一步就ok了。

要想检测安装是否成功,可以打开终端命令行工具,输入vagrant -c,看看程序是不是已经可以运行了。如果不行,请检查一下$PATH里面是否包含vagrant所在的路径。

vagrant -v
# Vagrant 2.2.6

如果看到输出,表示已经装好了,我这里安装的是2.2.6的版本。

如果下载速度比较慢,可以将下载链接复制到迅雷来下载

Box

当我们安装好 VirtualBoxVagrant 后,我们要开始考虑在 VM 上使用什么操作系统了,一个打包好的操作系统在 Vagrant 中称为 BoxBox 是一个打包好的操作系统环境 。

box文件的后缀为 .box。包含了虚拟机配置、虚拟机硬盘镜像和 Vagrant 配置的压缩包。

Box相当于帮我们完成了下载 iso 安装镜像,新建虚拟机然后配置cpu、内存、光驱、网络等信息,再从光驱启动并安装,完成后还要安装虚拟机增强工具、配置系统、映射端口、映射磁盘目录等工作。

有了封装好的 Boxes,就可以快速的搭建所需要的系统环境了。

理解了box是什么东西之后,现在要开始安装操作系统了,在 app.vagrantup.com 上面有大家熟知的大多数操作系统,可以选择先下载或者使用的时候通过vagrant在线下载都可以。

如果下载速度比较慢,可以将下载链接复制到迅雷来下载

关于Vagrant也可以通过官方提供的 Getting Started 来学习。

开始

建立工作目录

我的开发机是linux,建立了如下的开发目录。

/home/User/vagrant

可以根据自己的操作系统创建合适的操作目录。

初始化

进入工作目录,打开终端执行vagrant初始化的命令。

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

运行上面的命令后,Vagrant 会在工作目录下创建 Vagrantfile 配置文件,打开它在第15行可以看到下面config.vm.box="centos/7",作用是配置当前 Vagrant 环境使用哪个 Boxes

centos/7 是一个公开 Boxes,更多公开 Boxes 可以在 这里 找到。

在这里插入图片描述

启动虚拟机
vagrant up

在工作目录中执行上面的命令,Vagrant 会尝试加载并启动这个虚拟机,但此时虚拟机还没创建。

Vagrant会根据 config.vm.box 配置查看本机是否已经存在 centos/7 对应的 Boxes,如果本机没有就去远端仓库下载。下载完成之后直接从本地加载就可以了。

vagrant up
#/opt/vagrant/embedded/gems/2.2.6/gems/vagrant-2.2.6/lib/vagrant/util/which.rb:37: warning: Insecure world writable dir /opt/java/jdk1.8/bin in PATH, mode 040777 Bringing machine 'default' up with 'virtualbox' provider...
#==> default: Box 'centos/7' could not be found. Attempting to find and install...
#    default: Box Provider: virtualbox
#    default: Box Version: >= 0
#==> default: Loading metadata for box 'centos/7'
#    default: URL: https://vagrantcloud.com/centos/7
#==> default: Adding box 'centos/7' (v1905.1) for provider: virtualbox
#    default: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/1905.1/providers/virtualbox.box
#    default: Download redirected to host: cloud.centos.org
#    default: Progress: 16% (Rate: 1045k/s, Estimated time remaining: 0:04:47)

注意:如果速度很慢,可以复制出具体的 .box 文件 URL 并终止这次命令,改用其他工具(比如某迅某雷之类的)下载。

下载完成之后,可以通过两种方式来启动下载的box文件。(这里假设.box文件被下载到~/User/vagrant/centos/centos7.box

  • 方式一:打开 VagrantFile,修改 config.vm.box 配置为本地文件config.vm.box = "~/User/vagrant/centos/centos7.box"

    现在再执行 vagrant up 就会从本地加载 Boxes,稍等片刻虚拟机就启动就好了。
  • 方式二:将下载的.box文件添加到vagrant中。使用vagrant box add 镜像别名 镜像path 命令来添加,这里执行 vagrant box add centos/7 ~/User/vagrant/centos/centos7.box 就可以完成添加了。

    然后可以通过vagrant box list来查看当前拥有的box列表。

    现在再执行 vagrant up 就会从本地加载 Boxes,稍等片刻虚拟机就启动就好了。

如上面的操作一切正常,vagrant会在virtualBox上自动的配置一个系统,然后自动后台启动,我们无需介入。
在这里插入图片描述

连接到虚拟机

Vagrant 环境创建并启动后,在工作目录下,可以通过 vagrant ssh 进入这个虚拟机环境。通常不需要输入帐号密码就可以登录,登录之后的用户名是 vagrant(可以通过登陆后,通过whoami命令查看),密码也是 vagrant。这个帐号执行 sudo 不需要输入密码,因为封装 Boxes 时已经做了相应处理。
在这里插入图片描述这样我们就可以像连接到一台服务器一样进行操作了。

共享文件夹

虚拟机环境配好后,主机的 Vagrant 工作目录(Vagrantfile文件所在的目录)会被自动映射到虚拟机的 /vagrant 目录。所以当我们需要和虚拟机共享文件的时候,直接将文件放置到Vagrant 的工作目录即可。
这样在Vagrant工作目录操作本地文件,就相当于操作虚拟机,非常方便。

Vagrantfile配置文件详解

在我们的开发目录下有一个文件Vagrantfile,里面包含有大量的配置信息,主要包括虚拟机的配置、SSH配置、网络的配置等。

修改完Vagrantfile的配置后,记得要用vagrant reload命令来重启VM之后才能使用VM更新后的配置

box设置
config.vm.box = "base"
# 设置 centos/7 box 的版本,如果不指定,下载最新的
config.vm.box_version = "20161209.0.0"

上面的配置用来展示Vagrant要启用那个box作为系统,也就是上面vagrant init BOX_NAME时所指定的box,如果沒有输入box名称的話,那么默认就是base

网络设置

关于网络设置这块,在网上看到一篇文章写的很详细 参见这里

远程连接虚拟主机,参考这里 如何通过xshell等工具连接vagrant中的centos主机

hostname设置

hostname的设置非常简单,Vagrantfile中加入下面这行就可以了:

 config.vm.hostname = "go-app"

设置hostname非常重要,因为当我们有很多台虚拟服务器的时候,都是依靠hostname來做识别的。

同步目录

/vagrant的同步目录默认就是当前的开发目录,这是在虚拟机开启的时候默认挂载同步的。
此外还可以通过配置来设置额外的同步目录,我这里在Vagrantfile的46行,打开注释修改一下即可。

config.vm.synced_folder "../data", "/vagrant_data",create:true,
	disabled:false,owner:"root",group:"root"

上面这个设定,第一个参数是主机的目录,第二个参数是虚拟机挂载的目录,create 表示如果主机目录不存在,则创建主机目录,默认为falsedisable 表示是否禁用同步文件夹,默认为 falseownergroup 定义所有者/组

端口转发

下面两个配置,我这里在Vagrantfile2631行行,打开注释修改一下即可。

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

这一行的意思是把对宿主机器上8080端口的访问请求forward到虚拟机的80端口的服务上,这样Vagrant就会把这个请求转发到VM里面跑在80端口的nginx服务上,因此我们可以通过这个设置来帮助我们去设定hostVM之间,或是VMVM之间的信息交互。

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

默认映射到宿主机的端口是可以允许公众访问的,通过指定host_ip127.0.0.1来禁止公众访问。极少用这个设置。

修改完Vagrantfile的配置后,记得要用vagrant reload命令来重启VM之后才能使用VM更新后的配置

配置VirtualBox内存、CPU

进入虚拟机后,用 free -hm 命令查看虚拟机内存大小及使用情况。
在这里插入图片描述
可以看到虚拟机的默认内存还不到500M,可以通过一下配置来修改虚拟机占用的内存。我这里在配置文件的第52~57行。

config.vm.provider "virtualbox" do |vb|
   # vagrant up启动时,是否自动打开virtual box的窗口,缺省为false
   # vb.gui = true
   #指定vm-name,也就是virtualbox管理控制台中的虚机名称
   vb.name = "centos7"
   #指定vm内存,单位为MB
   vb.memory = "700"
   #设置CPU个数
   vb.cpus = 2
end

集成预执行

有时候,我们希望vagrant启动后,可以自动执行一些任务,这些任务也是可以通过Vagrantfile来定义的。打开 Vagrantfile 文件末尾处有下面被注释的代码:

config.vm.provision "shell", inline: <<-SHELL
   echo ${SHELL}
   echo "hello Vagrant"
SHELL

这段代码是用来预定义在vagrant up后,自动执行的任务的,配置方式时通过shell命令。
完成设置之后执行vagrant up --provision或者 vagrant reload --provision 就可以生效了。
在这里插入图片描述
还可以将要运行的命令单独写一个脚本文件,比如 init.sh,并保存在和Vagrantfile同目录。

#!/usr/bin/env bash
echo "以下是 vagrant provision 输出的内容"
echo ${SHELL}
echo "hello Vagrant"

然后修改 Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  ...
  # 修改为这样
  config.vm.provision "shell", path: "init.sh" 
end

完成修改后执行 vagrant reload --provision在这里插入图片描述

打包并分发自定义的box

当你配置好需要的环境后,退出并关闭虚拟机。

vagrant halt

在终端里对开发环境进行打包。

vagrant package --output first-docker-centos7.box

打包完成后会在当前目录生成一个 first-docker-centos7.box 的文件,将这个文件传给其他用户,其他用户只要添加这个 box

vagrant box add first-docker-centos7 first-docker-centos7.box

并用其初始化自己的开发目录就能得到一个一模一样的环境了。

vagrant init first-docker-centos7
vagrant up 
# 此时可以得到和之前一模一样的环境,但是网络要重新配置

也可以通过 vagrant package --vagrantfile VagrantfileVagrantFile 也打包进去

通过 vagrant package --base NAMA 命令可以打包一个由 VirtualBox 管理的虚拟机,NAME应该是VirtualBox界面中的计算机名称或者 UUID,目前支持 VirtualBox 虚拟机的导出

常用的命令

命令列表很无聊,记性很不靠谱!

命令功能
vagrant validate验证 Vagrantfile
vagrant box add NAME URL添加一个 box
vagrant box list查看本地box列表
vagrant box remove NAME virtualbox删除本地已添加的 box
vagrant init NAME初始化,实质应是创建 Vagrantfile 文件
vagrant global-status获取所有虚拟机的状态
vagrant status获取当前虚拟机的状态
vagrant up [name|id]启动虚拟机
vagrant halt关闭虚拟机
vagrant suspend [name|id]挂起当前的虚拟机
vagrant resume [name|id]恢复前面被挂起的状态
vagrant destroy停止当前正在运行的虚拟机并销毁所有创建的资源
vagrant reload [name|id]重新启动虚拟机,主要用于重新载入配置文件
vagrant package当前正在运行的 VirtualBox 虚拟环境打包成一个可重复使用的 box
vagrant ssh [name|id]进入虚拟环境
vagrant ssh-config [name|id]读取ssh配置文件的有效配置
vagrant plugin install [PLUGIN_NAME | /path/to/my-plugin.gem]安装插件,--local仅将插件安装到本地项目
vagrant plugin update [<PLUGIN_NAME>]更新插件,如果有名字,则只更新指定名称的插件
vagrant plugin expunge删除所有用户安装的插件,参数有--force--global-only--reinstall(删除后尝试重新安装插件)等
vagrant plugin uninstall <plugin_name1> [<plugin_name2 <plugin_name3> ...]移除插件PLUGIN_NAME
vagrant plugin list插件列表

参考

官方 Getting Started
开始使用 Vagrant
Vagrant的安装及使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值