介绍
Development Environments Made Easy
—官网标题
vagrant是一个命令行的虚拟机管理程序。用于简化搭建开发环境。
vagrant使用ruby语言基于Chef 开发。需要配合其他虚拟机程序进行工作,如vmare、virualbox、hyper-v等。并通过 CLI和VagrantFile(配置文件)管理虚拟机的所有功能。vagrant 使用自己的镜像格式进行环境部署,即box。类似于虚机的iso或者docker中的镜像。
选择vagrant+virualbox这个组合,因为它们都是开源的、跨平台的。vagrant搭建开发环境即简单又强大。
安装
官网下载安装。其中virualbox可选择安装
VirtualBox Extension Pack。使用虚拟机需要BIOS 开启虚拟化。
VirtualBox 官网
Vagrant 官网
BOX查找
https://app.vagrantup.com/boxes/search
几个场景
下面介绍几种vagrant 使用场景。所有步骤在WIN11系统下验证过。
1、一行命令搭建基本的开发环境
在CMD命令行下启动一个包含centos系统的虚拟机。其中"centos/7"是box名,root用户的默认密码是vagrant。真简单。
mkdir demo && cd demo && vagrant init centos/7 && vagrant up
2、单机开发环境
目标是搭建一个少量定制的单机开发环境。需要使用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 #重启虚拟机,可以生效修改的配置。
3、集群开发环境
目标是搭建一个运行在局域网中、包含多台物理机和虚拟机的集群环境。
思路是安装好公共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添加到物理机的本地库中。
调整 Vagrantfile 并通过 vagrant init
进行部署。
结语
扩展阅读vagrant的CLI、VagrantFile、插件、网络配置等可以在官网文档找到。