vagrant使用 vagrant下载
环境版本
& 'c:\Program Files\Oracle\VirtualBox\VBoxManage.exe' --version 5.2.20r125813 vagrant -v Vagrant 2.2.10 Vagrant 2.2.9
添加镜像文件
# 添加镜像 vagrant box add centos7 /Users/jcleng/Downloads/CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box # 查看镜像列表 vagrant box list # 移除镜像 vagrant box remove centos7
初始化虚拟机
vagrant init centos7 # 执行成功之后会创建一个文件,所有的操作都在Vagrantfile所在目录执行 Vagrantfile # 删除该虚拟机,Vagrantfile文件还是存在,镜像也还存在 vagrant destroy # 然后可以重新创建(启动)(或者查看镜像 vagrant box list) vagrant up # VBoxManage命令显示所有的虚拟机 vboxmanage list vms ## win & 'c:\Program Files\Oracle\VirtualBox\VBoxManage.exe' list vms # 打包为box文件(当前Vagrantfile所在目录执行) vagrant package --output ./CentOS7-my-2019-10-31.box
修改
Vagrantfile
文件config.vm.network "private_network", ip: "192.168.33.10" config.vm.network "public_network" config.vm.provider "virtualbox" do |vb| # Display the VirtualBox GUI when booting the machine vb.gui = false # Customize the amount of memory on the VM: vb.memory = "1024" end
文件共享插件
# 国内源: https://gems.ruby-china.com/
# 目录映射 使用 config.vm.synced_folder 提示 vagrant mount: unknown filesystem type 'vboxsf',请安装这个插件
vagrant plugin install vagrant-vbguest --plugin-clean-sources --plugin-source https://gems.ruby-china.com/
# 安装之后 reload 会自动安装linux依赖,确保已经换源,否则会很慢或者失败
vagrant reload
# 启动之后可能会报错,文件夹无法挂载
package kernel-devel-3.10.0-1127.el7.x86_64 available
# 换阿里源,更新系统,然后推出重启虚拟机,会重新安装相关依赖文件,自动挂载/Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso 即可
启动
vagrant up
停止
vagrant halt
进入ssh
vagrant ssh
配置ssh
# 电脑生成密匙,无脑回车 ssh-keygen -t rsa # 复制.pub文件内容,ssh-rsa开头的很长 cat ~/.ssh/id_rsa.pub # 复制到虚拟机authorized_keys文件,里面有一个vagrant的,换行粘贴进去 vi ~/.ssh/authorized_keys # 登录 ssh [email protected]
配置默认网卡
# 多张网卡启动的时候会提示选择网卡,等待用户选择
Available bridged network interfaces:
1) Realtek PCIe GbE Family Controller
2) Hyper-V Virtual Ethernet Adapter
==> default: When choosing an interface, it is usually the one that is
==> default: being used to connect to the internet.
==> default:
default: Which interface should the network bridge to?
# 配置文件修改
config.vm.network "public_network", bridge: "Realtek PCIe GbE Family Controller"
私有网络地址
# VirtualBox 查看VirtualBox Host-Only的网络适配器网段,定义一个同网段的ip
# Hyper-V 查看Hyper-V的网络适配器网段,定义一个同网段的ip
# 使用hyperv可能无法生效,原因未知
config.vm.network "private_network", ip: "192.168.56.100"
# 使用hyperv手动配置ip段和静态ip
## hyper-v创建新的交换机,自动会创建一个网卡
## 把物理网卡网络共享到该新网卡, 自动会分配新的网卡ip段
## 修改虚拟机的网络适配器,选择刚刚创建的新的网卡
## 重启虚拟机,然后手动修改新的静态ip段即可
### 用nmcli命令新增一个对应段的ip,比如192.168.137.120,重启网络即可
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:14:99:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.137.232/24 brd 192.168.137.255 scope global noprefixroute dynamic eth0
valid_lft 604650sec preferred_lft 604650sec
inet 192.168.137.120/24 brd 192.168.137.255 scope global secondary noprefixroute eth0
valid_lft forever preferred_lft forever
如果默认vagrant的公钥被弄丢了(默认不会保存到实体机),使用自己实体机生成的rsa
# 在 config.vm.synced_folder 下面添加,然后复制C:\Users\jcleng\.ssh\id_rsa.pub到虚拟机的/home/vagrant/.ssh/authorized_keys 里面即可
config.ssh.private_key_path = "C:/Users/jcleng/.ssh/id_rsa"
config.ssh.forward_agent = true
# 然后 vagrant ssh 即可连接
使用hyperv
下载hyperv的镜像然后, 修改如下(屏蔽默认virtualbox的设置), cmd需要管理员方式打开: 设置了synced_folder,提示smb共享输入用户名和密码时,输入当前winwdos的账户密码即可
config.vm.define "hyperv"
config.vm.provider "hyperv" do |h|
h.memory = "512"
h.maxmemory = 16384
h.cpus = 2
h.vm_integration_services = {
guest_service_interface: true,
CustomVMSRV: true
}
end
手动指定临时ip
# 在已有eth0的网卡上创建一个固定ip
sudo ifconfig eth0:0 172.18.11.208 up
sudo ifconfig eth0:1 172.18.11.210 up
# 关闭
sudo ifconfig eth0:0 down
# 查看结果
root@centos7:/home/vagrant# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:14:99:00 brd ff:ff:ff:ff:ff:ff
inet 172.18.11.203/20 brd 172.18.15.255 scope global noprefixroute dynamic eth0
valid_lft 85912sec preferred_lft 85912sec
inet 172.18.11.209/16 brd 172.18.255.255 scope global eth0:0
valid_lft forever preferred_lft forever
inet 172.18.11.210/16 brd 172.18.255.255 scope global secondary eth0:1
valid_lft forever preferred_lft forever
# 配置到Vagrantfile启动文件
config.vm.provision "shell", inline: <<-SHELL
ifconfig eth0:0 172.18.11.208 up
ifconfig eth0:1 172.18.11.210 up
SHELL
linux虚拟机手动安装VBoxGuestAdditions
# 下载 https://download.virtualbox.org/virtualbox/6.1.34/VBoxGuestAdditions_6.1.34.iso
# 然后虚拟机手动加载iso文件到虚拟硬盘
# 启动系统进入linux进行挂载
mkdir /tmp/cd
sudo mount /dev/cdrom /tmp/cd
# 安装运行
sudo /tmp/cd/VBoxLinuxAdditions.run
# 最后重启虚拟机即可
box的默认目录
# 设置环境变量即可
VAGRANT_HOME=D:\.vagrant.d
配置vscode .ssh\config
Host vbox_0001
HostName 172.21.12.250
Port 22
User vagrant
IdentityFile D:\work\001vbox\.vagrant\machines\hyperv\hyperv\private_key
使用qemu
# 替换 C:\Program Files\Vagrant\embedded\gems\specifications
https://rubygems.org
# 为
https://gems.ruby-china.com
# 安装vagrant-qemu插件
vagrant plugin install vagrant-qemu --plugin-clean-sources --plugin-source https://gems.ruby-china.com/
# 修改配置
config.vm.box = "centos/7"
config.vm.provider "qemu" do |qe|
qe.arch = "x86_64"
qe.machine = "q35"
qe.memory = "2024"
qe.cpu = "max"
# qe.smp = "cpus=2,sockets=1,cores=2,threads=1"
qe.smp = "6"
qe.net_device = "virtio-net-pci"
qe.extra_qemu_args = %w(-accel tcg,thread=multi,tb-size=512)
qe.gui = false
qe.no_daemonize = true
qe.control_port = 33333
qe.debug_port = 33334
qe.qemu_dir="C:\\Program Files\\qemu\\share"
end
# 初始化启动
vagrant up --provider qemu
# 使用的镜像是 libvirt 的镜像
https://vagrantcloud.com/centos/boxes/7/versions/2004.01/providers/libvirt/unknown/vagrant.box
https://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7-x86_64-Vagrant-1609_01.LibVirt.box
https://app.vagrantup.com/jborean93/boxes/WindowsServer2016/versions/1.2.0/providers/libvirt/amd64/vagrant.box
# 使用nixos镜像需要安装cifs-utils,实现smb文件共享
cifs-utils
box自带配置文件, 可以修改
C:\Users\Administrator\.vagrant.d\boxes\win\0\libvirt\Vagrantfile