vagrant认识及配置

什么是vargant

Vagrant提供了易于配置、便于重现、且便携的工作环境,它基于行业技术标准,
通过一个统一的流程控制来最大限度地提高 团队的灵活性及生产力
为了实现其功能,Vagrant 站在了巨人的肩膀上,基于VirtualBox, VMware, AWS, 或 其他 虚拟机管理软件(provider)
的接口来创建虚拟机。 因此,标准的 配置管理工具(provisioning tools (例如 shell 脚本, Chef, 或 Puppet)
都可以在 Vagrant 创建的虚拟机上使用,用来进行自动安装及配置管理。

准备工作

因为VMware不是免费的故Vagrant对应的也不是免费的。
所以我们使用VirtualBox来与Vagrant配套使用

安装VirtualBox和Vagrant这样我们就可以开始使用Vagrant

安装 Vagrant 并添加镜像

使用官方镜像

    vagrant box add hashicorp/precise64

hashicorp/precise64: 镜像名,其它镜像可以在此搜索

添加本地.box文件

可以在这里下载镜像或使用已经打包好的镜像

    vagrant box add hahaha ~/box/package.box  # 添加 package.box 镜像并命名为 hahaha
    cd ~/dev  # 切换到项目目录
    vagrant init hahaha  # 用 hahaha 镜像初始化。

使用ISO文件

需要使用一个Veewee的工具
例如:我们已经把一个rhel-server-6.5-x86_64-dvd.iso文件复制到了iso文件夹

    $ cd iso
    $ veewee vbox build 'rhel65-64bit'
    $ vagrant package --base rhel65-64bit --output rhel65-64bit.box
    $ vagrant box add --name rhel65-64bit rhel65-64bit.box

初始化环境

创建一个开发目录(比如:~/dev),你也可以使用已有的目录,切换到开发目录里,
用 centos/7 镜像初始化当前目录的环境:

    $ cd ~/dev  # 切换目录
    $ vagrant init centos/7  # 用 centos/7 进行 box 初始化
    $ vagrant up  # 启动环境
    $ vagrant ssh  # SSH 登录

提示: 使用vagrant虚拟的环境不受实体机的内存和CPU限制。只有你机器够好

配置多台虚拟机

    Vagrant.configure("2") do |config|
        config.vm.define :web do |web|
            web.vm.provider "virtualbox" do |v|
                v.customize ["modifyvm", :id, "--name", "web", "--memory", "512"]
            end
            web.vm.box = "base"
            web.vm.hostname = "web"
            web.vm.network :private_network, ip : "11.11.11.1"
        end

        config.vm.define :db do |db|
            db.vm.provider "virtualbox" do |v|
                v.customize ["modifyvm", :id, "--name", "db", "--memory", "512"]
            end
            db.vm.box = "base"
            db.vm.hostname = "db"
            db.vm.network :private_network, ip : "11.11.11.2"
        end
    end

这里使用了:web和:db定义了两个VM,设置完后再使用vagrant up启动。
可以通过vagrant ssh web和vagrant ss db分别登录指定虚拟机上。
验证两台虚拟机间的通信: (验证方法: 在web虚拟机上通过ssh登录到db虚拟机)

vagrant配置文件

Vagrantfile是vagrant的配置文件
具体说明可以参考这里

这里说明下怎么配置虚拟机的内存和CPU

    config.vm.provider "virtualbox" do |vb|
        vb.memory = 1024
        vb.cpus = 4
    end

遇到的坑

当使用centos配置多个虚拟机时发现设置的IP地址不生效

出现这个问题的原因是eth1网卡没有启动,启动网卡就可以了

    sudo ifup eth1

如果有多个虚拟机,这样非常麻烦. 我们可以在虚拟机创建的使用明确指定去启动这个网卡

  config.vm.provision "shell", inline: <<-SHELL
    echo "vagrant" | sudo passwd root --stdin > /dev/null 2>&1
    sudo ifup eth1
  SHELL

因为root开始的时候未设置密码,这里要先设置root的密码。
具体使用shell修改用户密码见这里

centos命令ifconfig找不到

那是因为使用ip代替了ifconfig
具体参考这里

远程连接出现Permission denied (publickey,gssapi-with-mic)

/etc/ssh/sshd_config 设置 PasswordAuthentication yes
重启虚拟机 或 sudo systemctl restart sshd

“Rsync” could not be found on your PATH

参考地址

I found in another forum that the local Vagrant directory is mounted as "/vagrant" via rsync. This is set in the box itself, you can check by opening

C:\Users\{your_username}\.vagrant.d\boxes\debian-VAGRANTSLASH-jessie64\8.2.2\virtualbox\Vagrantfile
and see the setting

  config.vm.synced_folder \
    ".",
    "/vagrant",
    type: "rsync"
to get around this I added the following line in my local Vagrantfile

  config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
and the error was resolved

常用命令

    $ vagrant init # 初始化
    $ vagrant up # 启动虚拟机
    $ vagrant halt # 关闭虚拟机
    $ vagrant reload # 重启虚拟机
    $ vagrant ssh # SSH 至虚拟机
    $ vagrant status # 查看虚拟机运行状态
    $ vagrant destroy # 销毁当前虚拟机
    $ vagrant suspend # 挂起虚拟机
    $ vagrant resume # 恢复挂起状态
    $ vagrant ssh-config # 输出ssh连接信息
    $ vagrant package # 打包当前运行的虚拟机的环境
    $ vagrant plugin # 用于安装卸载插件
    $ vagrant box list # 查看已添加镜像
    $ vagrant box remove centos/7 # 删除指定镜像
    $ vagrant box add "boxIdentity" # remoteUrlorLocalFile 添加box

你可能感兴趣的:(vagrant认识及配置)