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 works)接着进行初始化虚拟机:

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,自动帮你生成 Vagrantfile
  • vagrant init box 名字:初始化 Vagrantfile
  • vagrant 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/

图


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

网络配置参考:

https://www.jianshu.com/p/a1bc23bc7892

Last modification:January 31, 2020
如果觉得我的文章对你有用,请随意赞赏