安装
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
vagrant box add centos/7
选中想要的版本后开始下载
vagrant init centos/7
vagrant up
ssh 链接
vagrant ssh
配置共享文件目录
共享目录 会在 虚拟机构建的时候把本机目录下的文件复制到指定目录中
如果只设置了共享目录,两个目录文件不会实时同步
在 Vagrantfile 中
config.vm.synced_folder "../data", "/vagrant_data"
第一个是参数是本地电脑的目录,第二个是虚拟机上的目录
添加其他选项可以使用 , 逗号 分隔
config.vm.synced_folder "../data", "/share",create: true, owner: "root", group: "root"
create:true 目录如果不存在就创建
owner: “root” 拥有者 root
group: “root” 群组 root
配置好后重启
vagrant reload
共享目录实时同步 vbguest
安装插件
最新版3.0和 virtualbox6.1配合有问题,virtualbox6.1 这里安装 0.21版本可行(互相扯皮)
vagrant plugin install vagrant-vbguest --plugin-version 0.21
实时同步,虚拟机的挂载目录不能是 /vagrant
禁用 /vagrant
添加指定同步目录
config.vm.synced_folder ".", "/vagrant", disabled: trueconfig.vm.synced_folder "/Users/qj/prj/vagrant/centos", "/share",create: true, owner: "root", group: "root"
网络
安装 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 测试一下
ifconfig 可以看到 eth1 的 addr 就是设置的 ip 地址
公有网络
把虚拟机配置成在同一个网络下可以访问的设备,比如同一个路由器下的其他电脑也可以访问。
Vagrantfile 下找到,删除井号注释
config.vm.network "public_network"
保存
vagrant reload
此时会询问你用哪个网络
图中从1到8. 输入当前网络对应数字按回车
此时是不知道虚拟机的 ip 地址的
vagrant ssh 进入虚拟机
ifconfig 查看
eth1 的 ip 就是当前路由器分配的 ip
本机电脑 ping 此 ip 也是可以 ping 通,同一路由器下的其他设备也可以 ping 通
搭建 web 服务器
简单安装 nginx
sudo yum install epel-release
sudo yum install nginx
把 nginx.conf 默认的删掉
配置下 /etc/nginx/conf.d/xxx.conf
server {
listen 80;
server_name localhost;
location / {
root /share-data/www;
index index.html index.htm;
}
}
打包 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
