目录
一、vagrant介绍
是一款用于管理虚拟机的命令行使用软件,用Ruby语言开发而成。换言说,可以省去你使用虚拟机创建操作系统的所有操作,比如创建虚拟机,挂在镜像文件,一步步点击安装等等,使用vagrant,这些都不需要做了,简简单单两行命令,快速创建属于你个人的系统。
在开发方面,Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用。我们可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,非常霸气。
二、安装virtualBox
请查看我的另一篇文档。centos7.9安装virtualBox教程(离线rpm/互联网)_centos装virtualbox_mr__bai的博客-CSDN博客
三、在线安装vagrant
进入vagrant官网下载页,https://developer.hashicorp.com/vagrant/downloads
# 安装yum工具包,包含yum-config-manager命令
sudo yum install -y yum-utils
# 添加vagrant指定的软件仓库来源
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
# 安装vagrant
sudo yum -y install vagrant
vagrant默认是安装到/opt目录下。因为我这里安装过,所以效果可能不同
验证是否安装成功,输出了 Vagrant 的版本号,那么说明 Vagrant 已经成功安装了。
vagrant -v
或
vagrant --version
四、下载系统镜像。
在vagrant官网中,有一个findbox的按钮,这个是vagrant的镜像库,里边列出了都要哪些镜像可以用,并且提供了操作文档。
也可通过下边连接进入:https://app.vagrantup.com/boxes/search
但是这里默认下载往往会比较慢,所以下面我会介绍如何在其它地方下载到基础镜像,然后按照自己的需要重置。如果网速较好,下载顺利的朋友可以选择性地跳过部分内容。
下面我给出最常用的两个 Linux 操作系统镜像的下载地址:
CentOS
CentOS 的镜像下载网站是: http://cloud.centos.org/centos/
在其中选择自己想要下载的版本,列表中有一个 vagrant 目录,里面是专门为 vagrant 构建的镜像。选择其中的 .box 后缀的文件下载即可。这里可以使用下载工具,以较快的速度下载下来。
Ubuntu
Ubuntu 的镜像下载网站是: http://cloud-images.ubuntu.com/
同样先选择想要的版本,然后选择针对 vagrant 的 .box 文件即可。
如果这里官网的速度较慢,还可以从 清华大学的镜像站 下载。
例如:
五、使用vagrant详细步骤
现在我们已经安装好了 Vagrant 和 VirtualBox,可以开始使用 Vagrant 了
1、将下载后的 .box
文件上传到linux中,并添加到 vagrant 中
# 添加一个本地的box,以下两个命令都可以
vagrant box add 添加后的名字 .box镜像路径
或
vagrant box add .box镜像路径 --name 添加后的名称
# 查询vagrant 已经管理的 Box 有哪些
vagrant box list
# 根据名字删除指定的box
vagrant box remove NAME
扩展:添加带版本号的box
上述添加方式添加后的box,版本号为0。(注意到 (virtualbox, 0)
,这个 0
就是指的版本号,这跟它真是的版本号不符)。使用时虽然不影响,但是如果进行区分,可能带版本号更好一些。
方法一:按照上述方式添加,手动改变版本号。(不推荐)
# 进入vagrant隐藏目录
cd ~/.vagrant.d/boxs
# 进入要更改版本号的box目录
# 重命名目录0为版本号,我这里版本号是2004.01
mv 0 2004.01
# 查看box列表
vagrant box list
方法二:通过添加脚本metadata.json来添加(推荐)
(1)进入.box镜像文件的目录,新建一个metadata.json文件,将一下代码复制或手敲到文件中。
{ "name": "centos/7", "versions": [{ "version": "2004.01", "providers": [{ "name": "virtualbox", "url": "./镜像文件的名称.box" }] }] }
name:添加的box名字
version:版本号
providers.name:虚拟主机类型
providers.url:box路径
例如我的镜像名称为: CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box
(2)执行json脚本
vagrant box add metadata.json
2、在一个空的目录下,使用以下命令初始化 :
vagrant init <box名称>
这会将在当前目录下创建一个 Vagrantfile 文件,用于配置和定义我们的虚拟机 。
当你运行任何vagrant
命令时,Vagrant 会爬上目录树寻找它能找到的第一个 Vagrantfile,首先从当前目录开始。此功能使您可以vagrant
从项目中的任何目录运行。
查看vagrantfile详解,可查看官网的文档https://developer.hashicorp.com/vagrant/docs/vagrantfile
3、启动
vagrant up
要注意的是,需要在初始化的那个目录执行这个命令,也就是说当前目录中要有Vagrantfile
文件,否则会报一下错误。
4、查看状态
# 查看当前目录的虚拟机
vagrant status
# 显示 Vagrant 管理的所有虚拟机的状态。在输出中,你将看到每个虚拟机的 ID、名称、状态、提供者、目录和最后操作时间等信息。如果虚拟机正在运行,则状态列将显示 "running"。
vagrant global-status
5、ssh连接
执行vagrant ssh就能以vagrant用户直接登入虚机中。
vagrant默认账户:vagrant
vagrant账户的默认密码:vagrant
root
用户没有默认密码,也不能直接登录。需要 root 权限的命令可以通过在命令前添加 sudo执行,也可以执行sudo -i 直接切换到root用户。
6、停止虚拟机
vagrant halt
7、销毁
vagrant destroy [name|id]
此命令停止 Vagrant 正在管理的正在运行的机器并销毁在机器创建过程中创建的所有资源。运行此命令后,您的计算机应该处于干净状态,就好像您从来没有创建过客户机一样。
六、使用配置文件Vagrantfile启动
查看vagrantfile详解,可查看官网的文档https://developer.hashicorp.com/vagrant/docs/vagrantfile
Vagrantfile 的主要功能是描述项目所需的机器类型,以及如何配置和供应这些机器。Vagrantfiles 之所以被称为 Vagrantfiles,是因为该文件的实际文字文件名是Vagrantfile(大小写无关紧要,除非您的文件系统在严格区分大小写的模式下运行)。
Vagrant 旨在为每个项目运行一个 Vagrantfile。Vagrantfiles 的语法是Ruby,但是不需要了解 Ruby 编程语言就可以修改 Vagrantfile,因为它主要是简单的变量赋值
下边列了主要的常用配置:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box_check_update = false
config.vm.synced_folder ".", "/vagrant"
$num_instances = 2
(1..$num_instances).each do |i|
config.vm.define "node-#{i}" do |node|
node.vm.box = "centos/7"
node.vm.box_version = "2004.01"
node.vm.hostname = "node-#{i}"
$ip = "192.168.56.#{i+10}"
node.vm.network "private_network", ip: $ip
node.vm.provider "virtualbox" do |vb|
vb.memory = "4096"
vb.cpus = 2
vb.name = "node-#{i}"
end
end
end
end
注解:
- 配置版本:
上面第一行中的"2"表示配置对象config的版本。该配置对象config将用于该块的配置(do和end之间的部分)Vagrant.configure("2") do |config| # ... end
- config.vm.box_check_update:Vagrant将在每个vagrant up检查更新。如果发现更新,Vagrant会告诉用户。默认情况下,这是true。
- config.vm.synced_folder:配置同步文件夹,使得主机上的文件夹可以同步到虚拟机中,并且虚拟机中的文件夹也可以同步回主机。其中"."是当前目录,"/vagrant"是建立的虚拟机中的目录。
(1..3).each do |i| config.vm.define "node-#{i}" do |node| # 虚拟机配置信息 end end
- 这段代码会定义3个虚拟机实例,分别命名为"node-1"、"node-2"和"node-3"
- config.vm.define是Vagrant中用于定义虚拟机实例的设置。使用该设置,您可以为每个虚拟机实例指定名称、网络设置、同步文件夹、端口转发、虚拟硬件等配置信息。虚拟机配置信息可以在块中定义,块的参数是虚拟机实例对象,您可以在块中使用该对象来指定虚拟机的配置信息
- config.vm.define中的名字是定义虚拟机实例的名称,同时也可以用来标识虚拟机实例的配置信息。这个名称在 Vagrantfile 中必须是唯一的,因为它将被用来区分不同的虚拟机实例,从而确保每个实例都拥有独立的配置信息和资源
- node.vm.box = "centos/7":这个配置项指定了要启动的虚拟机使用的box。它的值可以是已安装box的名称,也可以是HashiCorp Vagrant Cloud中box的简称
- node.vm.box_version = "2004.01":要使用的Vagrant box版本。默认为“>= 0”(可用的最新版本)。它可以包含由逗号分隔的任意约束条件列表,例如:">= 1.0, < 1.5"。当给出约束条件时,Vagrant将使用满足这些约束条件的最新可用的box。如果添加的box版本号为0,那可以不写此配置。
- node.vm.hostname = "node-#{i}":主机应该具有的主机名。默认为nil。如果为nil,则Vagrant不会管理主机名。如果设置为字符串,则主机名将在启动时设置。如果设置,则Vagrant将使用配置的主机名更新客户机上的/etc/hosts文件。
- node.vm.network "private_network", ip: "":这将为虚拟机添加一个名为“private_network”的网络接口,并为其分配IP地址。还支持其他类型的网络接口,例如公共网络(public network)、端口转发(forwarded port)等,
config.vm.provider "virtualbox" do |vb| # 配置 end
- 用于配置虚拟机提供程序(如 VirtualBox、VMware、Hyper-V 等)的参数之一。它可以用于调整虚拟机资源,如内存、CPU、磁盘大小等。
- vb.memory = "4096":设置虚拟机内存大小为4096 MB
- vb.cpus = 2:设置虚拟机CPU数量为2
- vb.name = "node-#{i}":用来指定VirtualBox虚拟机的名称的。通过设置这个参数,可以自定义VirtualBox虚拟机的名称,而不是使用Vagrant默认生成的名称。这里的name就是virtualbox界面查看到的虚拟机名称。可以这样理解:
vb.name
是给用户看的虚拟机实例名称,而config.vm.define
中的名字则是给 Vagrant 使用的虚拟机实例标识符。
vb.customize ["<command>", "<option1>", "<value1>", "<option2>", "<value2>", ...]
- 用来定制化 VirtualBox 虚拟机的参数的。它可以在创建或运行虚拟机时添加或修改 VirtualBox 的配置参数
- 注意:默认硬盘大小为40GB
用VagrantFile文件启动:
在VagrantFile目录下执行vagrant up:
两个虚拟机已生成。