安装

vagrant 就是通过编辑 vagrantfile 一行命令快速构建一台或多台 虚拟机的
需要安装 vagrant 和 virtualbox
vagrant 官网
https://www.vagrantup.com/
virtualbox
https://www.virtualbox.org/wiki/Downloads

常用命令

vagrant box list 查看目前已有的box
vagrant box add 新增加一个box
vagrant box remove 删除指定box
vagrant init 初始化配置vagrantfile
vagrant up 启动虚拟机
vagrant ssh ssh登录虚拟机
vagrant suspend 暂停虚拟机,暂停虚拟机只会占用硬盘空间,不再使用内存
vagrant resume 暂停后,恢复虚拟机
vagrant reload 重启虚拟机
vagrant halt 关闭虚拟机
vagrant status 查看虚拟机状态
vagrant destroy 删除虚拟机
vagrant reload —provision 重启虚拟机 让配置生效
vagrant ssh-config 查看sshd配置信息
vagrant global-status 查看全部虚机状态

Vagrantdfile 文档

https://www.vagrantup.com/docs/vagrantfile

添加 box

官网搜索想要的 box,比如 centos
https://app.vagrantup.com/boxes/search

  1. vagrant box add centos/7

选中想要的版本后开始下载

  1. vagrant init centos/7
  1. vagrant up

ssh 链接

  1. vagrant ssh

配置共享文件目录

共享目录 会在 虚拟机构建的时候把本机目录下的文件复制到指定目录中
如果只设置了共享目录,两个目录文件不会实时同步

在 Vagrantfile 中

  1. config.vm.synced_folder "../data", "/vagrant_data"

第一个是参数是本地电脑的目录,第二个是虚拟机上的目录

添加其他选项可以使用 , 逗号 分隔

  1. config.vm.synced_folder "../data", "/share",
  2. create: true, owner: "root", group: "root"

create:true 目录如果不存在就创建
owner: “root” 拥有者 root
group: “root” 群组 root

配置好后重启

  1. vagrant reload

共享目录实时同步 vbguest

安装插件
最新版3.0和 virtualbox6.1配合有问题,virtualbox6.1 这里安装 0.21版本可行(互相扯皮)

  1. vagrant plugin install vagrant-vbguest --plugin-version 0.21

实时同步,虚拟机的挂载目录不能是 /vagrant
禁用 /vagrant
添加指定同步目录

  1. config.vm.synced_folder ".", "/vagrant", disabled: true
  2. config.vm.synced_folder "/Users/qj/prj/vagrant/centos", "/share",
  3. create: true, owner: "root", group: "root"

vagrant reload 重启

网络

安装 ifconfig

sudo yum install net-tools

安装 vim

sudo yum install vim

私有网络(常用)

为虚拟机指定一个 ip 地址,通过 ip 地址本机电脑可以和虚拟机通信。
Vagrantfile 下找到,删除井号注释

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

保存
vagrant reload

本机 ping 192.168.33.10 测试一下
image.png
ifconfig 可以看到 eth1 的 addr 就是设置的 ip 地址
image.png

公有网络

把虚拟机配置成在同一个网络下可以访问的设备,比如同一个路由器下的其他电脑也可以访问。

Vagrantfile 下找到,删除井号注释

config.vm.network "public_network"

保存
vagrant reload
此时会询问你用哪个网络
image.png
图中从1到8. 输入当前网络对应数字按回车

此时是不知道虚拟机的 ip 地址的
vagrant ssh 进入虚拟机
ifconfig 查看
eth1 的 ip 就是当前路由器分配的 ip
image.png
本机电脑 ping 此 ip 也是可以 ping 通,同一路由器下的其他设备也可以 ping 通

搭建 web 服务器

简单安装 nginx

sudo yum install epel-release
sudo yum install nginx

把 nginx.conf 默认的删掉
image.png
配置下 /etc/nginx/conf.d/xxx.conf

server {
    listen    80;
    server_name   localhost;

    location / {
        root  /share-data/www;
        index index.html index.htm;
    }
}

sudo nginx -t 检查
sudo nginx 启动

打包 box

vagrant package --output web20200304.box

得到一个 web20200304.box

可以把这个 box 加入到系统 box
第一个参数是在系统中 box 名,第二个参数是被添加的 box 文件路径

vagrant box add simpleweb web20200304.box

多主机

网络配置

可以使用刚才自定义的 box 初始化 Vagrantfile

vagrant init simpleweb

简单定义两个主机 node1 和 node_2.
名字中 可以用
不能使用-
hostname 可以用 - 不能用 _

# 通用的配置可以放在外面
config.vm.box = "simpleweb"

config.vm.define "node_1" do |node_1|
  node_1.vm.network "private_network", ip: "192.168.0.17"
  node_1.vm.hostname = "node1"
end

config.vm.define "node_2" do |node_2|
  node_2.vm.network "private_network", ip: "192.168.0.18"
  node_2.vm.hostname = "node2"
end

进入 node_1

vagrant ssh node_1

主机名管理插件:hostmanager

可以通过手动设置每台虚拟机的 /etc/host 实现
hostmanager 可以自动设置
安装

vagrant plugin install vagrant-hostmanager

配置 Vagrantfile
manage_guest 允许更新虚拟机上的 host
manage_host 允许更新 本地主机上的 host

config.hostmanager.enable = true
config.hostmanager.manage_guest = true
config.hostmanager.manage_host = true

命令执行

→ vagrant hostmanager

多主机共享目录

config.vm.define "node_1" do |node_1|
    node_1.vm.network "private_network", ip: "192.168.0.17"
    node_1.vm.hostname = "node1"
    node_1.vm.synced_folder "node1_data", "/share-data"
  end

  config.vm.define "node_2" do |node_2|
    node_2.vm.network "private_network", ip: "192.168.0.18"
    node_2.vm.hostname = "node2"
    node_2.vm.synced_folder "node2_data", "/share-data"
  end

切换 root 用户

vagrant ssh

su root

密码是: vagrant