vagrant简单介绍

vagrant :

功能:虚拟机编排工具,快速搭建开发环境 可与 virtualbox 、hyper-v 、kvm 等配合使用

官网: https://www.vagrantup.com/

建议 使用 virtualbox:https://www.virtualbox.org/wiki/Downloads

vagrant virtualbox :需要使用专门镜像

linux 官方 box 下载地址: 国内 ustc mirrors 下载 注意后缀 vagrant virtualbox

vagrant vm: 注意

默认用户名 :  vagrant
密码: vagrant
切换root: sudo su - root
#原始镜像box 为纯净系统 sshd selinux firewalld 需要自行配置
#建议 box 放置一个专门目录 
#例如 /opt/vbox
#centos http://mirrors.ustc.edu.cn/centos-cloud/centos/
centos 7 : http://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box

#ubuntu http://mirrors.ustc.edu.cn/ubuntu-cloud-images/
ubuntu focal : http://mirrors.ustc.edu.cn/ubuntu-cloud-images/focal/current/focal-server-cloudimg-amd64-vagrant.box
ubuntu : 启动时 有坑 :注意 

官网doc地址:https://www.vagrantup.com/docs

官网教学地址:https://learn.hashicorp.com/vagrant

1 安装环境:

安装 vagrant virtualbox: 建议最新版

操作方式 命令行: 
windows: cmd or powershell ,linux : bash

2 添加删除box: 下载地址上方已给出 国内 源

#语法 vagrant box add 自定义box名字  box地址 : 可以使用相对路径或绝对路径
#建议 box 放置一个专门目录
vagrant box add centos7 ./CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box
#查看的导入的 镜像
vagrant box list
#有导入的镜像即成功
vm01 vagrant box list
centos7      (virtualbox, 0)

#移除添加的box
#vagrant box remove box名字
vagrant box remove centos7

3 创建第一个 vm实例:

#首先创建一个空文件夹 随意
mkdir vm01
#初始化配置 :使用本地 box
#语法 vagrant init 自定义box名字 
vagrant init centos7
#有以下显示即成功
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
#文件夹下即生成 Vagrantfile #及其重要
ls
#Vagrantfile 说明在下方

4 vm使用:

#启动 vm:默认配置启动: 网卡自带 nat
#官网镜像 vm :默认纯净配置 ,需要自定义修改
#默认创建实例名为:default
#直接在创建目录中操作
vagrant up
#启动无法挂载目录,可以通过配置文件进行关闭
#详情看 下方 配置文件说明
#ssh连接 vm 即可使用 
vagrant ssh default

#vagrant关闭: 默认实例为default实力
vagrant halt default
#vm内部也可以关闭
sudo shutdown -h now
#如果无法正常关闭
#可以使用virtualbox 强制关闭

vagrant status
#查看 实例 vm 状态
vagrant global-status
#查看全局状态 id
#nginx vagrant global-status 
id       name    provider   state    directory       

#销毁实例 从 virtualbox 上删除:默认为default
vagrant destroy default
#通过id进行销毁 box
vagrant destroy id号

5 自定义box模板

以纯净box 为模板创建box:

#例如
#更新yum 源
#修改 sshd selinux 配置
#安装常用软件 vim wget
#配置专有 服务 nginx,mysql等

#建议做以下配置
#切换root 用户
sudo su - root
#建议纯净box 做以下配置
vi /etc/default/grub
#修改这行配置为下
GRUB_CMDLINE_LINUX="no_timer_check console=tty0,115200n8 net.ifnames=0 biosdevname=0 elevator=noop crashkernel=auto"
#重新生成grub2 
grub2-mkconfig -o /boot/grub2/grub.cfg

#修改sshd 配置:允许远程登录
vim /etc/ssh/sshd_config
PasswordAuthentication yes
ChallengeResponseAuthentication no
UseDNS no

#修改yum 源 为 阿里源
mkdir /opt/yumbak
mv /etc/yum.repos.d/* /opt/yumbak
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache

#关闭实例 vm
vagrant halt default
#打包vm为box :等待完成
vagrant package default
ls
package.box  Vagrantfile  Vagrantfile.temp
#package.box 即为导出box


# 1 重命名名字
# 2 添加box 即可使用
# 3 查看镜像 vagrant box list
mv default.box package.box
mv package.box centos7-new.box
vagrant box add centos/new  ./centos7-new.box
vagrant box list

#测试使用
mkdir new
cd new
vagrant init centos/new
vagrant up

Vagrantfile 说明:

以下配置可以直接使用: 修改box 名字

常见配置说明: ruby 编写 语法可以查官网 docs

单实例说明:

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
#实例1 配置
Vagrant.configure("2") do |config|
  #本地box:可以通过 vagrant box list 查看
  config.vm.box = "centos7"
  #vm主机名字: 虚拟机主机名 :避免重名
  config.vm.hostname  = "centos7"
  #默认开启挂载共享目录:建议关闭,使用sftp 连接
  #会出现驱动问题
  config.vm.synced_folder ".", "/home/vagrant", disabled: true
  #关闭box检查
  config.vm.box_check_update = false
  #自定义一个网卡:主机模式 :建议使用 自定义IP,便于管理连接 :避免重复
  config.vm.network "private_network", ip: "192.168.33.50"
  #virtualbox 配置
  config.vm.provider "virtualbox" do |vb|
     #配置 内存
     vb.memory = "1024"
     #配置 cpu
     vb.cpus = "2"
     #配置 virtualbox 显示名字
     #避免重名
     vb.name = "vm01"
   end
end

多实例配置:

Vagrant.configure("2") do |config|
  
  #注意前缀 centos:可以自定义
  config.vm.define "centos" do |centos|
    centos.vm.hostname = "centos7"
    centos.vm.box = "centos7"
    centos.vm.network "private_network", ip: "192.168.33.41"
    centos.vm.synced_folder ".", "/home/vagrant", disabled: true
    centos.vm.provider "virtualbox" do |vb|
     vb.memory = "1024"
     vb.cpus = "2"
     vb.name = "centos7"
   end
  end

  config.vm.define "ubuntu" do |ubuntu|
    ubuntu.vm.hostname = "ubuntu"
    ubuntu.vm.box = "focal/ubuntu"
    ubuntu.vm.network "private_network", ip: "192.168.33.42"
    ubuntu.vm.synced_folder ".", "/home/vagrant", disabled: true
    ubuntu.vm.provider "virtualbox" do |vb|
     vb.memory = "1024"
     vb.cpus = "2"
     vb.name = "ubuntu"
   end
  end
end

ubuntu box坑:focal/ubuntu

导入后无法正常启动:或启动卡死

通过 virtualbox 启动:
dmesg 分析: 
启动故障在于 :启动加载 console=

#解决方法:
#virtualbox 窗口强制关闭
virtualbox 设置 :
串口:端口2
端口模式: 裸文件 
路径/地址:随意文件 /tmp/ubuntu.log
再通过virtualbox启动
修改gurb 启动文件
sudo su - root
vi /etc/default/grub.d/50-cloudimg-settings.cfg
配置为:
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0"
vi 
#更新启动文件 grub
update-grub
#关闭cloud服务 非云环境建议关闭
apt-get remove cloud-init
#重新启动测试
#没有问题。关机

导出为自定义 box 模板
然后导入
以后使用此box模板即可
ubuntu box本地网卡配置:
#卸载cloud-init服务 非云环境建议关闭
apt-get remove cloud-init
vim /etc/default/grub
#查找:
GRUB_CMDLINE_LINUX=""
#修改为:
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
#更新配置文件
update-grub
#修改网卡配置文件
vim /etc/netplan/50-cloud-init.yaml
#修改 ens32为eth0
#重启生效
posted @ 2020-09-27 11:43  时客  阅读(324)  评论(0)    收藏  举报