美文网首页vagrant
vagrant认识及配置

vagrant认识及配置

作者: 唯我楼兰 | 来源:发表于2017-03-01 10:05 被阅读435次

    什么是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认识及配置

        本文链接:https://www.haomeiwen.com/subject/vtrqgttx.html