手摸手教学Vagrant,你还不会算我输!(一)

它能干嘛呢?你可以理解为与Docker类似,帮助我们快速部署开发环境。一款用于管理虚拟机的命令行实用软件
安装完成之后的账号密码都是 vagrant


一. 首先要使用的环境软件,下载安装

  1. Vagrant下载地址: https://www.vagrantup.com/downloads
  2. VirtualBox下载地址:
    https://www.virtualbox.org/wiki/Downloads
  3. 可用的box地址:https://app.vagrantup.com/boxes/search

查看是否安装成功:

vagrant --help
vagrant --version
接下来就可以安装各种系统了如下:

1.安装Windows10 系统

vagrant init galppoc/windows10
vagrant up

2.安装 macOS 系统

vagrant init jhcook/macos-sierra
vagrant up

3.安装 Linux/Unix 系统

① centos:
vagrant init generic/centos7
vagrant up

② Ubuntu:
vagrant init generic/ubuntu2010
vagrant up

③ redhat:
vagrant init generic/rhel7
vagrant up

④ fedora:
vagrant init generic/fedora32
vagrant up

⑤ oracle linux:
vagrant init generic/oracle7
vagrant up

二.1 Vagrant 虚拟机系统命令

查看 Vagrant 当前所有已安装系统

vagrant global-status

在这里插入图片描述
初始化虚拟机系统 ,之后,会自动生成一个Vagrantfile文件,可自定义编辑,玩转 Vagrant 关键

vagrant init luciferliu/oracle11g

校验 Vagrantfile 文件

vagrant validate

在这里插入图片描述
启动虚拟机系统,用默认虚拟机 virtualbox 启动虚拟机系统,过程中显示,如果本地没有添加过 box,vagrant up 启动后会自动下载添加。

vagrant up --provider=virtualbox

连接虚拟机系统

vagrant ssh

查看虚拟机系统状态

vagrant status 

在这里插入图片描述
重载虚拟机系统

vagrant reload

关闭虚拟机系统,虚拟机系统将会立刻关闭

vagrant halt

打包虚拟机系统,打包后备份它,

vagrant package

删除虚拟机系统 ,慎用

vagrant destory

一行命令安装linux

vagrant box add bento/oracle-7.9 --provider virtualbox && sudo vagrant init bento/oracle-7.9 && sudo vagrant up

二.1 Vagrant 插件管理

插件基地:https://vagrant-lists.github.io/#plugins
查看已安装插件

vagrant plugin list

安装插件

vagrant plugin install vagrant-share

卸载插件

vagrant plugin uninstall vagrant-share

修复插件

vagrant plugin repair

更新插件

vagrant plugin update

这里分享下我已安装的几个插件

vagrant-parallels (2.2.3, global)
用于 Parallels Desktop 虚拟机的支持插件

vagrant-proxyconf (2.0.10, global)
用于设置虚拟机代理

vagrant-share (2.0.0, global)
通过插件可以分享你的虚拟机环境给朋友

vagrant-mutate (1.2.0, global)
使用插件可以转换你的 box ,比如从 virtualbox 到 kvm


####安装方式:
vagrant plugin install vagrant-parallels
vagrant plugin install vagrant-proxyconf
vagrant plugin install vagrant-reload
vagrant plugin install vagrant-share
vagrant plugin install vagrant-mutate
vagrant plugin list

顺便给大家分享一个解决 Vgrant 插件安装慢的方法:
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gem sources -l

二 .2 Vagrant Box 管理

可用的box地址:https://app.vagrantup.com/boxes/search
在这里插入图片描述

查看所有已添加 box

vagrant box list

添加新的 box,下载 box 到本地,指定本地 box 添加,名称为centos7。

vagrant box add /Volumes/Lucifer/vagrant/centos79-oracle11g-vb/centos7.9 --name=centos7

移除已添加 box

vagrant box remove centos7

vagrant下载地址:https://www.vagrantup.com/downloads
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

三、高阶玩法:Vagrant 配套工具 之ngrok/packer

@1.1 安装ngrok,官网下载安装包,解压是个可执行文件,直接双击使用,下载地址:https://dashboard.ngrok.com/login
需要注册一个 ngrok 用户,获取授权码,来授权本地机器
直接运行

ngrok authtoken 你的授权码

@1.2. 测试 ngrok 是否可用,打开你的浏览器访问 http://127.0.0.1:4040
在这里插入图片描述

ngrok http 80

@1.3. 使用 vagrant-share 插件,分享你的虚拟机
这里有个小前提:需要环境变量中配置 ngrok ,否则 vagrant 无法获取到改命令:
我是将解压的 ngrok 可执行工具放入 /opt/vagrant/bin 目录下

export VG_HOME='/opt/vagrant'
export PATH=$PATH:$VG_HOME/bin

@1.4 使用 ssh 方式分享你的主机:过程中需要输入两次密码

vagrant share --ssh

在这里插入图片描述

@1.5 客户端连接,输入提示的链接命令即可:

vagrant connect --ssh orange_amigo:george_botanic@forward

2. packer,用来定制你的专属 Box 的

@2.1 下载执行文件,双击即可,官网地址:https://www.packer.io/downloads
这里有个小前提:需要环境变量中配置 packer ,否则 vagrant 无法获取到改命令

export VG_HOME='/opt/vagrant'
export PATH=$PATH:$VG_HOME/bin

注意:我是将解压的 packer 可执行工具放入 /opt/vagrant/bin 目录下,参考如上配置即可。
@2.2 下载一个centos或者windows镜像,也就是安装包https://mirrors.163.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
下载之后需要用sha sum 生成 字符,下面有用:

shasum -a 256 /Users/lpc/Downloads/CentOS-7-x86_64-Minimal-2009.iso

在这里插入图片描述

@2.3打包,需要用bento,也就是github打包,项目地址:https://github.com/chef/bento
把它git clone下载

git clone https://hub.fastgit.org/chef/bento.git

@2.4 打开刚 git 的项目,自定义 packer json 文件,在刚下载的git项目目录中

{
  "builders": [
    {
      "boot_command": [
        "<up><wait><tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `ks_path`}}<enter><wait>"
      ],
      "boot_wait": "5s",
      "cpus": "{{ user `cpus` }}",
      "disk_size": "{{user `disk_size`}}",
      "guest_additions_path": "VBoxGuestAdditions_{{.Version}}.iso",
      "guest_additions_url": "{{ user `guest_additions_url` }}",
      "guest_os_type": "RedHat_64",
      "hard_drive_interface": "sata",
      "headless": "{{ user `headless` }}",
      "http_directory": "{{user `http_directory`}}",
      "iso_checksum": "{{user `iso_checksum`}}",
      "iso_url": "{{user `mirror`}}/{{user `mirror_directory`}}/{{user `iso_name`}}",
      "memory": "{{ user `memory` }}",
      "output_directory": "{{ user `build_directory` }}/packer-{{user `template`}}-virtualbox",
      "shutdown_command": "echo 'vagrant' | sudo -S /sbin/halt -h -p",
      "ssh_password": "vagrant",
      "ssh_port": 22,
      "ssh_timeout": "10000s",
      "ssh_username": "vagrant",
      "type": "virtualbox-iso",
      "virtualbox_version_file": ".vbox_version",
      "vm_name": "{{ user `template` }}"
    },
    {
      "boot_command": [
        "<up><wait><tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `ks_path`}}<enter><wait>"
      ],
      "boot_wait": "5s",
      "cpus": "{{ user `cpus` }}",
      "disk_size": "{{user `disk_size`}}",
      "guest_os_type": "centos",
      "http_directory": "{{user `http_directory`}}",
      "iso_checksum": "{{user `iso_checksum`}}",
      "iso_url": "{{user `mirror`}}/{{user `mirror_directory`}}/{{user `iso_name`}}",
      "memory": "{{ user `memory` }}",
      "output_directory": "{{ user `build_directory` }}/packer-{{user `template`}}-parallels",
      "parallels_tools_flavor": "lin",
      "prlctl_version_file": ".prlctl_version",
      "shutdown_command": "echo 'vagrant' | sudo -S /sbin/halt -h -p",
      "ssh_password": "vagrant",
      "ssh_port": 22,
      "ssh_timeout": "10000s",
      "ssh_username": "vagrant",
      "type": "parallels-iso",
      "vm_name": "{{ user `template` }}"
    }
  ],
  "post-processors": [
    {
      "output": "{{ user `build_directory` }}/{{user `box_basename`}}.{{.Provider}}.box",
      "type": "vagrant"
    }
  ],
  "provisioners": [
    {
      "environment_vars": [
        "HOME_DIR=/home/vagrant",
        "http_proxy={{user `http_proxy`}}",
        "https_proxy={{user `https_proxy`}}",
        "no_proxy={{user `no_proxy`}}"
      ],
      "execute_command": "echo 'vagrant' | {{.Vars}} sudo -S -E sh -eux '{{.Path}}'",
      "expect_disconnect": true,
      "scripts": [
        "{{template_dir}}/scripts/update.sh",
        "{{template_dir}}/../_common/motd.sh",
        "{{template_dir}}/../_common/sshd.sh",
        "{{template_dir}}/scripts/networking.sh",
        "{{template_dir}}/../_common/vagrant.sh",
        "{{template_dir}}/../_common/virtualbox.sh",
        "{{template_dir}}/../_common/vmware.sh",
        "{{template_dir}}/../_common/parallels.sh",
        "{{template_dir}}/scripts/cleanup.sh",
        "{{template_dir}}/../_common/minimize.sh"
      ],
      "type": "shell"
    }
  ],
  "variables": {
    "box_basename": "centos-7.9",
    "build_directory": "../../builds",
    "build_timestamp": "{{isotime \"20060102150405\"}}",
    "cpus": "2",
    "disk_size": "65536",
    "git_revision": "__unknown_git_revision__",
    "guest_additions_url": "",
    "headless": "",
    "http_directory": "{{template_dir}}/http",
    "http_proxy": "{{env `http_proxy`}}",
    "https_proxy": "{{env `https_proxy`}}",
    "iso_checksum": "07b94e6b1a0b0260b94c83d6bb76b26bf7a310dc78d7a9c7432809fb9bc6194a",
    "iso_name": "CentOS-7-x86_64-Minimal-2009.iso",
    "ks_path": "7/ks.cfg",
    "memory": "1024",
    "mirror": "",
    "mirror_directory": "Users/lpc/Downloads",
    "name": "centos-7.9",
    "no_proxy": "{{env `no_proxy`}}",
    "template": "centos-7.9-x86_64",
    "version": "TIMESTAMP"
  }
}

#需要修改的地方:
    "mirror": "",
    "mirror_directory": "Users/lpc/Downloads",
iso 的 checksum 结果和 iso 名称:

在这里插入图片描述
@2.5 启动 packer 进行打包,成功后会有一个.box文件

cd /Volumes/DBA/vagrant/packer/packer_templates/centos
packer build -only=virtualbox-iso centos-7.9-x86_64.json


打包完之后的 box 才 300 多M,来测试一下能不能用吧:

vagrant box add /Volumes/DBA/vagrant/packer/bento/builds/centos-7.9.virtualbox.box --name=centos79
vagrant init centos79
vagrant up --provider=virtualbox

连接使用,打工搞成!

vagrant ssh

操作流程

0、创建目录

mkdir centos_vagrant

1、查看当前主机box镜像

vagrant box list

可用的box地址:https://app.vagrantup.com/boxes/search
在这里插入图片描述

vagrant init centos/7
vagrant up

如果出现,这个不用管:
在这里插入图片描述

2、初始化box镜像

2.1 通过标准存储库添加:
vagrant box add bento/oracle-7.9 --provider virtualbox
2.2 通过镜像源添加:
http://cloud.centos.org/centos/
vagrant box add --name ol76 https://yum.oracle.com/boxes/oraclelinux/ol76/ol76.box

3、查看添加的box:

vagrant box list

4、创建虚机Linux

mkdir /Volumes/DBA/Vagrantboxes
cd /Volumes/DBA/Vagrantboxes
vagrant init bento/oracle-7.9

在这里插入图片描述
4.1、编辑Vagrantfile配置文件

mkdir -p /Volumes/DBA/Vagrantboxes/scripts/
echo 'echo "**** hello ****"' > /Volumes/DBA/Vagrantboxes/scripts/my_script.sh

4.2、我们可以通过编辑 Vagrantfile 来更改一些 VM 属性。

cd /Volumes/DBA/Vagrantboxes
mv Vagrantfile Vagrantfilebak
cat <<EOF>/Volumes/DBA/Vagrantboxes/Vagrantfile
# Set some variables.
var_public_ip      = '192.168.56.100'

Vagrant.configure("2") do |config|
  config.vm.box = "bento/oracle-7.9"
  config.vm.provision :shell, path: "/opt/vagrant/scripts/my_script.sh"
  config.vm.network :forwarded_port, guest: 1521, host: 1521
  config.vm.network "private_network", ip: "192.168.56.10"

  config.vm.provider "virtualbox" do |vb|
    vb.memory = 2048      # Memory size in M.
    vb.cpus   = 1         # Number of vCPUs
    vb.name   = "oracle—7.9"   # VM name.
  end
end
EOF

5、启动虚机linux

vagrant up
vagrant ssh

6、通过SSH登录主机

ssh 127.0.0.1 -p 2222

7 管理box镜像主机
可以使用以下命令初始化、停止、启动、重新启动、删除 VM、列出和移除镜像。

vagrant status  #查看状态
vagrant halt    # 关机
vagrant up      # 启动
vagrant destroy -f # 删除
vagrant reload  # 重启
vagrant suspend   # 挂起
vagrant resume    # 唤醒
vagrant box remove bento/oracle-7.6

8 box管理命令:

vagrant box list    # 查看本地box列表
vagrant box add     # 添加box到列表
vagrant box remove  # 从box列表移除   

编写不易,给个三联吧!!!

https://juejin.cn/post/6991641685851635749


版权声明:本文为feiyu361原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。