Vagrant(官网、github)是一款构建虚拟开发环境的工具,支持 Window,Linux,Mac OS,Vagrant 中的 Boxes 概念类似于 Docker(实质是不同的),你可以把它看作是一个箱子,里面装了一些东西,Vagrant 创建虚拟机的时候,需要用到 Box ,它里面包含了虚拟机配置、虚拟机硬盘镜像和 Vagrant 配置的压缩包,有了 Box,你不需要再重新下载 ISO 镜像文件、新建虚拟机、修改虚拟机等配置,而是直接运行你所需要的操作系统。
更多 Vagrant 概念,参考:Vagrant 是什么,不是什么。
错误解决文章参考:vagrant+centos7 安装报错
Vagrant 支撑 VirtualBox、HyperV、VMWare 等虚拟机软件,我 Mac 电脑装的是 VMWare Fusion,但 Vagrant 支持是收费的(79 美元),好黑呀,不过 VirtualBox 是免费的,我又安装了个 VirtualBox(大概 300 M),以便做示例。
安装 Vagrant(使用 homebrew)
历史版本下载地址:https://download.virtualbox.org/virtualbox
brew install vagrant
安装插件解决可成出现的:
This filesystem is made available via the VirtualBox Guest Additions and kernel module.的错误
vagrant plugin install vagrant-vbguest
vagrant reload --provision
安装好 Vagrant 之后,就可以使用初始化 Box 了,你可以使用别人封装好的 Box,也可以自己封装 Box,比如下面命令:
安装box有三种方式
方式一:中央仓库安装
中央仓库地址:https://app.vagrantup.com/boxes/search
vagrant box add ubuntu/trusty64
运行上面第一行命令后,Vagrant 会在工作目录下创建 Vagrantfile 配置文件。在线下载 Box 会比较慢。
方式二:远程url安装
vagrant box add my_first_box https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
方式三:本地安装
我使用的是 centos7 。 Box 下载地址:http://www.vagrantbox.es/ 。下载下路来后本地安装。
下载好 Box 之后,你可以创建这样的工作目录:
$ tree
.
├── boxes
│ └── precise64.box
└── works
2 directories, 1 files
创建命令:
mkdir vagrant_projects
mkdir boxes
mkdir works
然后把下载好的 Box 放到 boxes 文件夹下,然后命令转到 boxes 目录下(cd boxes),然后执行添加 Box 命令:
vagrant box add centos7.2 ./vagrant-centos-7.2.box
注:centos7.2是box的命名
添加后之后,可以查看所添加的 Box 列表:
➜ boxes vagrant box list
centos7.2 (virtualbox, 0)
命令转到 works 目录下(cd work
s)接着进行初始化虚拟机:
vagrant init centos7.2
初始化完成后,会在当前目录下生成一个 VagrantFile 配置文件,里面是对虚拟机环境的一些配置(可以手动修改),然后启动虚拟机:
➜ centos7 vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos7.2'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: centos7_default_1545374761163_99389
Vagrant is currently configured to create VirtualBox synced folders with
the `SharedFoldersEnableSymlinksCreate` option enabled. If the Vagrant
guest is not trusted, you may want to disable this option. For more
..............
虚拟机启动好之后(可以在 VirtualBox 中查看是否已启动),就可以登录虚拟机了:
➜ centos7 vagrant ssh
Last login: Fri Dec 21 06:46:36 2018 from 10.0.2.2
[vagrant@localhost ~]$
这个命令就表示已经进入了 Centos7 的系统,可以像在虚拟机中使用一样使用它了。
Win10的安装使用
在win10使用、vagrant _v:2.2.2。配合:Oracle VM VirtualBox 6.0版本中启动不了centos/7 的box
出现以下错误:
错误信息
百度和谷歌都没有正确的解决办法、然后更换了一下5.2版本的Oracle VM VirtualBox 然后可以了、不过生成了另一个错误信息
解决办法是: 管理员身份运行cmd关闭Microsoft-Hyper-V
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
#提示重启选择y
如果开启请用管理员执行命令:
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V
vagrant 命令参数
vagrant box list
:查看box列表vagrant add box box
名字 box地址:添加box,自动帮你生成 Vagrantfilevagrant init box
名字:初始化 Vagrantfilevagrant up
:启动虚拟机vagrant ssh
:连接虚拟机vagrant halt
:关闭虚拟机vagrant reload
:重新加载 Vagrantfile 文件vagrant suspend
:暂时挂起虚拟机vagrant destroy
:销毁虚拟机vagrant status
:查看虚拟机运行状态vagrant package
:导出 Box
Vagrant的的镜像
centos/7的Virtualbox的镜像地址:http://cloud.centos.org/centos/7/
centos7在vagrant官方的镜像、由于vagrant的镜像下载网址被墙、先开代理、查看真实网址、在通过迅雷下载。因为迅雷有缓存文件服务器
https://vagrantcloud.com/centos/boxes/7/versions/1905.1/providers/virtualbox.box
是通过下面图片获取的http://cloud.centos.org/centos/7/vagrant/x86_64/images/ 具体的镜像
更换镜像更详细的文档
https://blog.csdn.net/yjk13703623757/article/details/70040797
Vagrant虚拟机套路
我的笔记本是mac。vm里面装nginx和php。数据库用宿主机(本机mac本)的mysql
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.require_version ">= 1.6.0"
boxes = [
{
:name => "docker-host",
:eth1 => "192.168.205.10",
:mem => "1024",
:cpu => "1"
}
]
Vagrant.configure(2) do |config|
config.vm.box = "centos/7"
boxes.each do |opts|
config.vm.define opts[:name] do |config|
config.vm.hostname = opts[:name]
config.vm.provider "vmware_fusion" do |v|
v.vmx["memsize"] = opts[:mem]
v.vmx["numvcpus"] = opts[:cpu]
end
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--memory", opts[:mem]]
v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
end
config.vm.network :private_network, ip: opts[:eth1]
end
end
config.vm.synced_folder "./labs", "/home/vagrant/labs"
config.vm.provision "shell", privileged: true, path: "./setup.sh"
end
我的集成环境的mysql配置文件需要改个配置
把 MAMP_bind-address_MAMP
变量替换
bind-address = 0.0.0.0
然后允许root用户可以任何ip访问。
执行sql语句
update user set Host = '%' where User = 'root';
回报个错ERROR 1062 (23000): Duplicate entry ‘%-root’ for key ‘PRIMARY’
不用管、刷新服务命令
flush privileges;
通过ssh直接连上虚拟机
ssh vagrant@127.0.0.1 -p 2222 -o Compression=yes -o DSAAuthentication=yes -o LogLevel=FATAL -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -i /Volumes/media/vagrant_openresty_swoole/.vagrant/machines/docker-host/virtualbox/private_key
需要ssh 的-i选项
-i /Volumes/media/vagrant_openresty_swoole/.vagrant/machines/docker-host/virtualbox/private_key
指定了秘钥访问
-o StrictHostKeyChecking=no
和-o UserKnownHostsFile=/dev/null
表示不做主机验证,即不用在第一次SSH的时候手动地回复一次yes。
-p 表示指定端口。上面的端口来来源于虚拟机启动时候的信息
成功访问并且退出。
主机访问虚拟主机ssh免密登录
获取自己机器上的公钥
cat ~/.ssh/id_rsa.pub
ssh-rsa AAA .........
拷贝下来进入vagrant虚拟机
vim authorized_keys
[vagrant@docker-host .ssh]$ vim authorized_keys
追加公钥即可
这里的ip是vagrant文件里面指定的。因为本身虚拟机是允许主机访问的
其他常用选项
#目前vagrant添加下面配置、回报读取不到秘钥的问题,包含加入username,passwd
config.ssh.username = "vagrant"
config.ssh.password = "vagrant"
config.ssh.private_key_path = "~/.vagrant.d/insecure_private_key"
config.ssh.insert_key = false
config.ssh.forward_agent = true
config.ssh.keys_only = false
文章参考:
https://www.cnblogs.com/xishuai/p/macos-use-vagrant-with-virtualbox.html
网络配置参考: