美文网首页
vagrant_example_01

vagrant_example_01

作者: Kate_Blog | 来源:发表于2018-11-27 03:32 被阅读4次

    vagrant 命令

    # 你创建一个配置文件,后面的 centos/7 是虚拟机要用的一个系统镜像(box)的名字
    vagrant init centos/7
    # 启动虚拟机
    vagrant up
    
    vagrant ssh
    # exit
    
    vagrant status
    
    # 彻底关闭虚拟机
    vagrant halt
    
    # 休眠,被唤醒以后,在休眠之前运行的程序仍然会继续运行。 vagrant up 唤醒
    vagrant suspend
    
    # 销毁虚拟机:这样再次启动虚拟机以后,Vagrant 会根据项目下的 Vagrantfile 里的配置,为你创建一台全新的虚拟机。
    vagrant destroy
    
    # 电脑上的镜像列表: 如果存在镜像(box) ,Vagrant 就不会去下载它了,直接会在电脑上复制一份这个镜像。
    vagrant list
    
    # 安装镜像
    vagrant box add ubuntu/trusty64
    
    # 手工下载box文件后,安装到box列表
    vagrant box add ubuntu/trusty64 ~/downloads/virtualbox.box
    
    # 检查一下镜像是否有可用的升级
    vagrant box outdated
    
    # 执行升级
    vagrant box update
    
    # 删除镜像
    vagrant box remove ubuntu/trusty64
    
    

    Vagrantfile 虚拟机配置文件

    
    # 运行命令 vagrant init centos/7 得到的vagrantfile内容如下:
    
    Vagrant.configure("2") do |config|
        # 配置内容放在这里
      config.vm.box = "centos/7" # 指定了虚拟机使用的镜像是 centos/7
    end
    
    

    虚拟机网络配置

    • 端口转发,私有网络,公有网络。
    • vagrant up 一开始会清理之前配置的端口转发与网卡的配置。然后会根据我们在 Vagrantfile 里做的网络配置重新配置虚拟机内部的网络。

    端口转发配置

    • 修改vagrantfile配置后,需要运行 vagrant reload
        # 主机(host)上面的8080端口转发到虚拟机的80(guest)端口,
        config.vm.network "forwarded_port", guest: 80 , host: 8080
        
        Vagrant.configure("2") do |config|
            config.vm.box = "centos/7"
            config.vm.network "forwarded_port", guest: 80 , host: 8080
        end
        
        vagrant reload # 重启虚拟机
    

    私有网络配置

    • 在主机和虚拟机之前创建一个私有网络,或者叫专用网络。
    • 这个网络只有两个设备,主机和这个主机创建的使用这个网络的虚拟机
    • ip : 为虚拟机分配的在这个虚拟网络上的IP地址
    • 主机可以通过这个IP地址访问虚拟机
    • 路由上的其他设备不能访问这个私有网络的虚拟机
    config.vm.network "private_network", ip:"192.168.33.10"
    
    vagrant reload
    

    公有网络配置

    • 路由器创建的局域网,路由会为虚拟机分配一个IP
    • 虚拟机和主机在同一个网络
    • 同一网络的其他设备可以直接通过虚拟机在公有网络上的IP地址访问虚拟机
        #查看主机的在网络上的ip, 一般:12.168.31.x 
        ifconfig
        # 修改Vagrantfile
        config.vm.network "public_network"
        
        # 重启虚拟机
        vagrant reload
    
        # 登录虚拟机
        vagrant ssh
        
        # 在虚拟机运行,查看网络命令 :  192.168.8.132
        ip addr
         
    

    同步目录

    默认同步目录

    • 项目所在目录例如Vagrantfile文件所在目录
    • 每次重启(vagrant reload)都会同步到虚拟机/vagrant目录下
    • 禁用默认的同步目录
        # 禁用默认的同步目录, 重启生效
        # "." 主机的当前目录
        # "/vagrant" 虚拟机的同步目录
        config.vm.synced_folder ".", "/vagrant", disabled:true
    

    设置同步目录

    • 同步目录的类型默认就会是 Virtualbox。这种类型的同步需要你在虚拟机上安装 virtualbox guest addition,如果没安装,在启动虚拟机的时候会报错。
    • 这种类型的共享目录存在性能问题
        cogfig.vm.synced_folder "./app", "/mnt"
    

    NFS类型的同步目录

    • macOS 平台用户可以使用 NFS 类型的共享目录,Windows 用户无法使用这种类型的共享目录
        config.vm.synced_folder "./app", "/mnt", type: "nfs"
    

    SMB类型同步目录

    • Windows 用户可以使用 SMB 这种类型的同步目录
        sudo yum install cifs-utils -y
        config.vm.synced_folder "app", "/mnt", type: "smb", smb_username: "wanghao", smb_password: "密码"
    

    Virtualbox类型的同步目录

    • 虚拟机上安装了 virtualbox guest addition
    • 这种类型的共享目录存在性能问题
    • 如果网站应用只有少量文件还可以,如果文件数量太多,在这种类型的共享目录上运行的网站会非常慢。

    同步目录的用户权限

    定义多台虚拟机

    • 如果你想在之前创建的 awesome-project 里测试多机配置,先把之前创建的虚拟机使用 vagrant destroy 销毁掉,然后添加新的多机配置,再去启动
    • 在 Vagrantfile 里定义一台机器,就是一个代码块:
        Vagrant.configure("2") do |config|
          config.vm.box = "centos/7"
        
          config.vm.define "web" do |web|
            web.vm.network "private_network", ip: "192.168.33.11"
          end
        
          config.vm.define "db" do |db|
            db.vm.network "private_network", ip: "192.168.33.12"
          end
        end
    
    • 多台共用的一些配置可以放在定义虚拟机的代码块之外,比如:
        config.vm.box = "centos/7"
    
    • 启动
    • 执行 vagrant up,可以同时启动定义的所有的虚拟机。
    • 也可以单独启动某台机器 vagrant reload web

    创建自己的box

    # 先关闭虚拟机:
    vagrant halt
    
    vagrant package 当前要被打包的系统名 --output 打包到的地址/包名
    # 由于在Vagrantfile中,我们为虚拟机指定了名字“my-vertualbox”,在创建box时我们可以直接通过该名字指向新建的虚拟机:
    vagrant package --base my-virtualbox
    
    # Vagrant将创建名为package.box的新的box,此后我们便可以使用该package.box作为其他虚拟机的基础box了
    vagrant package
    
    # 再把Vagrantfile拷贝过去 两条命令就可以重现当前的开发环境,
     vagrant box add server package.box
     vagrant up
    
    

    相关文章

      网友评论

          本文标题:vagrant_example_01

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