zoukankan      html  css  js  c++  java
  • Vagrant入门

    Vagrant入门

    安装

    Vagrant 依赖 virtualbox,所以需要先安装,到这里下载:Download VirtualBox

    截图录屏_选择区域_20210302103403

    先安装 virtualbox:

    caibh@book:/data/virtualbox$ sudo dpkg -i virtualbox-6.1_6.1.18-142142~Debian~buster_amd64.deb 
    

    安装成功后还需要安装一下扩展包,扩展包需要打开virtualbox,在全局设定那里安装:

    截图录屏_选择区域_20210302103633

    按下图点击加号,选中下载的扩展包 Oracle_VM_VirtualBox_Extension_Pack-6.1.18.vbox-extpack 进行安装即可:

    截图录屏_选择区域_20210302103708

    hello world

    国内访问官方的镜像比较慢,结局办法是到科大镜像站下载,比如这里有一个CentosOS的镜像: CentOS-7.box

    下载好之后执行vagrant命令添加本地镜像:

    $ vagrant box add centos7 CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box 
    

    查看 box :

    $ vagrant box list
    centos7 (virtualbox, 0)
    

    使用名为 centos7 的 box 新建一个虚拟机:

    # 新建一个目录
    $ cd /data/vagrant/vm
    $ mkdir hello
    $ cd hello
    
    # 使用名为 centos7 的 box 新建一个虚拟机
    $ vagrant init centos7
    
    # 执行后会在 hello 目录下生成一个 Vagrantfile 文件
    # 此时在 hello 目录下启动虚拟机
    $ vagrant up
    
    # 备注:打开 virturalbox 的 gui 界面,也能看到新建的虚拟机
    

    挂起虚拟机:

    # 注意:一定要在 hello 目录下执行
    $ vagrant suspend
    

    关闭虚拟机:

    # 注意:一定要在 hello 目录下执行
    $ vagrant halt
    

    ssh 登录到虚拟机:

    $ vagrant ssh
    

    销毁虚拟机:

    $ vagrant destroy
    # 注意:执行后并不会删除 hello 目录下的 Vagrantfile 文件
    

    Vagrant Box 国内镜像

    小技巧:新建虚拟机时可以直接指定国内的镜像

    # 新建一个名为 ubuntu-bionic 的虚拟机,镜像来源于国内的一个ubuntu镜像
    # 语法:vagrant init <name> <url>
    $ vagrant init ubuntu-bionic https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cloud-images/bionic/current/bionic-server-cloudimg-amd64-vagrant.box
    

    关于 Box

    通过 vagrant init 然后 vagrant up 可以触发下载一个box,我们也可以直接添加一个box:

    # hashicorp/bionic64 来源于默认的官方仓库
    $ vagrant box add hashicorp/bionic64
    
    # 通过国内镜像添加 ubuntu 18.04 的box
    $ vagrant box add ubuntu:18.04 https://mirrors.ustc.edu.cn/ubuntu-cloud-images/bionic/current/bionic-server-cloudimg-amd64-vagrant.box
    

    我们可以在Vagrantfile中指定需要基于哪个box创建虚拟机:

    Vagrant.configure("2") do |config|
      # 指定镜像
      config.vm.box = "hashicorp/bionic64"    
      # 可以指定镜像的版本
      config.vm.box_version = "1.0.282"
    end
    

    通过 url 位置的 box 创建虚拟机

    # 指定官方的 url
    Vagrant.configure("2") do |config|
      config.vm.box = "hashicorp/bionic64"
      config.vm.box_url = "https://vagrantcloud.com/hashicorp/bionic64"
    end
    
    # 或指定国内镜像的 url
    Vagrant.configure("2") do |config|                                                 
      config.vm.box = "ubuntu-bionic"                                                 
      config.vm.box_url = "https://mirrors.ustc.edu.cn/ubuntu-cloud-images/bionic/current/bionic-server-cloudimg-amd64-vagrant.box"
    end   
    

    查看box列表

    $ vagrant box list
    

    删除box

    $ vagrant box remove ubuntu-bionic
    

    同步目录

    通过 vagrant up 启动虚拟机后,vagrant ssh 进入虚拟机,会发现默认是使用 vagrant 用户登录进去的(账号密码都是vagrant),而且 Vagrantfile 所在目录和虚拟机中 /vagrant 目录是同步的,也就是说:

    • 在虚拟机中/vagrant目录新增一个 a.txt 文件,宿主机Vagrantfile所在目录就同步出现一个 a.txt 文件
    • 在宿主机Vagrantfile所在目录就新增一个 b.txt 文件,在虚拟机中/vagrant目录就会同步出现一个 a.txt 文件

    配置虚拟机

    场景:配置虚拟机,该虚拟机启动后就已经安装好一个Apache,并可以访问它的静态网页。

    Vagrantfile 同级目录下创建 html/index.html文件:

    $ cd /data/vagrant/vm/ubuntu
    $ mkdir html
    $ ls
    html  Vagrantfile
    $ cd html
    
    # cat > index.html 表示cat的输出重定向到文件
    # << EOF 表示输入重定向,结束符是EOF
    $ cat > index.html << EOF
    <!DOCTYPE html>
    <html>
      <body>
        <h1>Getting started with Vagrant!</h1>
      </body>
    </html>
    EOF
    

    Vagrantfile 同级目录下创建 bootstrap.sh脚本文件:

    caibh@book:/data/vagrant/vm/ubuntu$ cat bootstrap.sh 
    #!/usr/bin/env bash
    
    # 替换仓库源
    sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/' /etc/apt/sources.list
    
    apt-get update
    apt-get install -y apache2
    
    # -L 表示判断/var/www是否链接文件
    if ! [ -L /var/www ]; then
      rm -rf /var/www
      ln -fs /vagrant /var/www
    fi
    

    配置 Vagrantfile, 指定配置虚拟机时执行 bootstrap.sh 脚本(备注:下面的 ubuntu:18.04 本地镜像已提前通过 vagrant add ubuntu:18.04 https://mirrors.ustc.edu.cn/ubuntu-cloud-images/bionic/current/bionic-server-cloudimg-amd64-vagrant.box 创建):

    Vagrant.configure("2") do |config|  
      config.vm.box = "ubuntu:18.04"
      config.vm.provision :shell, path: "bootstrap.sh"
    end
    

    如果未启动过虚拟机,那么执行 vagrant up,如果已经启动过,则执行 vagrant reload --provision 重新加载虚拟机配置。

    当虚拟机重新启动后,vagrant ssh 进入虚拟机,验证配置:

    vagrant@ubuntu-bionic:/vagrant$ wget -qO- 127.0.0.1
    <!DOCTYPE html>
    <html>
      <body>
        <h1>Getting started with Vagrant!</h1>
      </body>
    </html>
    

    注意:到此位置只能在虚拟机内部访问,还不能在宿主机上访问到该网页。

    配置网络

    要从宿主机访问上面的网页文件,需要配置一下端口转发:

    Vagrant.configure("2") do |config|
      config.vm.box = "ubuntu:18.04"
      config.vm.provision :shell, path: "bootstrap.sh"
      config.vm.network :forwarded_port, guest: 80, host: 4567
    end
    

    由于之前已经执行过 bootstrap.sh 脚本初始化虚拟机的配置了,这里只是修改端口转发的配置,所以只需要 reload 一下,不需要加上 --provision 选项:

    $ vagrant reload
    

    在宿主机验证配置:

    caibh@book:/data/vagrant/vm/ubuntu$ curl http://localhost:4567
    <!DOCTYPE html>
    <html>
      <body>
        <h1>Getting started with Vagrant!</h1>
      </body>
    </html>
    

    分享你的环境

    安装配置 ngrok

    Vagrant Share 功能依赖 ngrok(内网穿透工具),所以需要先注册一个 ngrok 账号

    下载解压 ngrok 程序:

    $ cd ~/app && mkdir ngrok && cd ngrok
    $ wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
    $ unzip ngrok-stable-linux-amd64.zip
    

    配置到 PATH 环境变量中:

    $ vim /etc/profile.d/env.sh
    
    # 配置 ngrok 程序到 PATH 环境变量中
    export NGROK_HOME=/home/caibh/app/ngrok
    export PATH=$NGROK_HOME:$PATH
    
    # 不要忘了刷新配置
    $ source /etc/profile
    

    配置ngrok账号分配的token,并启动:

    $ ngrok authtoken 1pBzhxnSAoH14PC3uxxxxxxxxxx3YPWseMmZY1rYxxxxxx
    
    $ ngrok help
    
    $ ngrok http 80
    

    安装 vagrant-share 插件

    # 有点慢,但始终能装上
    $ vagrant plugin install vagrant-share
    

    执行一下,vagrant 就会调用 ngrok 开启内网穿透

    # 在 Vagrantfile 同级目录下执行
    $ vagrant share
    ==> default: Detecting network information for machine...
        default: Local machine address: 127.0.0.1
        default:  
        default: Note: With the local address (127.0.0.1), Vagrant Share can only
        default: share any ports you have forwarded. Assign an IP or address to your
        default: machine to expose all TCP ports. Consult the documentation
        default: for your provider ('virtualbox') for more information.
        default:  
        default: Local HTTP port: 4567
        default: Local HTTPS port: disabled
        default: Port: 2222
        default: Port: 4567
    ==> default: Creating Vagrant Share session...
    ==> default: HTTP URL: http://659b5409e9ca.ngrok.io
    

    设置命令行补全

    vagrant autocomplete install --bash --zsh
    

    更多命令请参考:https://www.vagrantup.com/docs/cli

    Vagrantfile 配置

    利用循环配置多台机器

    Vagrant.configure("2") do |config|
        # 新建三台虚拟机 node-1, node-2, node-3
        (1..3).each do |i|
          config.vm.box = "ubuntu:18.04"
          config.vm.define "node-#{i}" do |node|
            node.vm.provision "shell", inline: "echo hello from node #{i}"
          end
        end
    end
    

    参考

  • 相关阅读:
    用户场景故事
    我喜欢的输入法
    课堂练习-----查找水王
    《你的灯亮着吗》阅读笔记1
    补第二阶段冲刺站立会议6(原6月8日)
    补第二阶段冲刺站立会议5(原6月7日)
    补第二阶段冲刺站立会议4(原6月6日)
    补第二次冲刺站立会议3(原6月5日)
    补第二次冲刺站立会议2(原6月4日)
    补第二次阶段冲刺站立会议1(原6月3日)
  • 原文地址:https://www.cnblogs.com/caibh/p/14470340.html
Copyright © 2011-2022 走看看