Vagrant 搭建开发环境实践

2021年11月20日 阅读数:1
这篇文章主要向大家介绍Vagrant 搭建开发环境实践,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

介绍

Development Environments Made Easy
—官网标题node

vagrant是一个命令行的虚拟机管理程序。用于简化搭建开发环境。linux

vagrant使用ruby语言基于Chef 开发。须要配合其余虚拟机程序进行工做,如vmare、virualbox、hyper-v等。并经过 CLIVagrantFile(配置文件)管理虚拟机的全部功能。vagrant 使用本身的镜像格式进行环境部署,即box。相似于虚机的iso或者docker中的镜像。docker

选择vagrant+virualbox这个组合,由于它们都是开源的、跨平台的。vagrant搭建开发环境即简单又强大。json

安装

官网下载安装。其中virualbox可选择安装
VirtualBox Extension Pack。使用虚拟机须要BIOS 开启虚拟化。segmentfault

VirtualBox 官网

https://www.virtualbox.org/centos

Vagrant 官网

http://www.vagrantup.com/ruby

BOX查找

https://app.vagrantup.com/boxes/search网络

几个场景

下面介绍几种vagrant 使用场景。全部步骤在WIN11系统下验证过。app

一、一行命令搭建基本的开发环境

在CMD命令行下启动一个包含centos系统的虚拟机。其中"centos/7"是box名,root用户的默认密码是vagrant。真简单。ssh

mkdir demo && cd demo && vagrant init centos/7 && vagrant up

二、单机开发环境

目标是搭建一个少许定制的单机开发环境。须要使用CLI命令和配置文件来完成。

手动下载BOX

网速慢能够本身下载box文件,并添加到本地box库。

下载地址:

https://app.vagrantup.com/centos/boxes/7/versions/2004.01/providers/virtualbox.box

box添加到本地库的命令

vagrant box add centos/7 CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box

**初始化 **进入命令行,创建一个目录,用centos/7 box 初始化。

md demo
cd demo
vagrant init centos/7

基本的配置文件 初始化后会在当前目录生成名为 Vagrantfile 的文件。以Ruby语言为格式。

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7" #box名称
  config.vm.hostname="base" #虚拟机操做系统里的hostname
  config.vm.network "private_network", type: "dhcp" #使用私有网络,自动分配IP
  #config.vm.network "private_network", ip: "172.28.128.3"    #也能够配置静态IP
  config.vm.provider "virtualbox" do |vb|
    vb.gui = false #启动时不开启GUI
    vb.memory = "4096" #内存限制4096MB
  end
end

经常使用命令

vagrant up #启动虚拟机
vagrant status #查看虚拟机状态
vagrant ssh #连接虚拟机
vagrant halt #关闭虚拟机
vagrant destroy #删除虚拟机
vagrant reload #重启虚拟机,能够生效修改的配置。

三、集群开发环境

目标是搭建一个运行在局域网中、包含多台物理机和虚拟机的集群环境。

思路是安装好公共box后,对其进行定制。打包成自定义box,分发到不一样的物理机上部署。

使用vagrant的公共网络模式,为每一个虚拟机在局域网分配固定IP,集群环境里的任意物理机和虚拟机能够直接互通。

初始化一个centos环境

md test
cd test
vagrant init centos/7

定制环境

容许用户名密码连接SSH

使用vagrant ssh 连接虚拟机

vagrant ssh

su #切换 root用户,密码vagrant
vagrant

vi /etc/ssh/sshd_config #编辑ssh配置文件

修改配置项、容许密码登录,并保存。

PasswordAuthentication yes

service sshd restart #重启ssh服务

操做系统设置

#修改时区
timedatectl set-timezone Asia/Shanghai
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#关闭Linux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
#关闭swap 
swapoff -a #临时关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭
free -g #验证,swap必须为0

设置阿里云Centos镜像源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
yum update -y

安装Docker

#依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
#源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#版本
yum list docker-ce --showduplicates | sort -r
#安装
yum install docker-ce-18.03.1.ce-1.el7.centos  -y
#启动
systemctl start docker
systemctl enable docker
#设置阿里云docker镜像源

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://mt1tth70.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload
systemctl restart docker

自定义BOX

打包当前环境,默认名称package.box。加入本地库,取名base。

box本地仓库 默认路径 C:\Users\Administrator.vagrant.d\box

vagrant package
vagrant box add base package.box

配置文件

Vagrant.configure("2") do |config|

  #虚拟机1号 
  config.vm.define "node201" do |node1|
    node1.vm.box = "base" #使用自定义的box
    node1.vm.hostname = "node201"
    node1.vm.network "public_network", ip: "192.168.31.201"
  end

  #虚拟机2号
  config.vm.define "node202" do |node2|
    node2.vm.box = "base"
    node2.vm.hostname = "node202"
    node2.vm.network "public_network", ip: "192.168.31.202"
  end

  # config.vm.define "node203" do |node3|
  #   node3.vm.box = "base"
  #   node3.vm.hostname = "node203"
  #   node3.vm.network "public_network", ip: "192.168.31.203"
  # end

  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.memory = "4096"
    vb.cpus = 4
  end

end

部署集群环境

将打包好的自定义box和配置文件,复制到须要部署的各物理机,而且安装vagrant环境。
使用 vagrant box add 将box添加到物理机的本地库中。
使用 vagrant init base 初始化。
调整 Vagrantfile 并经过 vagrant up进行部署。

结语

扩展阅读vagrant的CLI、VagrantFile、插件、网络配置等能够在官网文档找到。

Documentation | Vagrant by HashiCorp (vagrantup.com)