Vagrant 搭建開發環境實踐

介紹

Development Environments Made Easy
—官網標題

vagrant是一個命令行的虛擬機管理程式。用於簡化搭建開發環境。

vagrant使用ruby語言基於Chef 開發。需要配合其他虛擬機程式進行工作,如vmare、virualbox、hyper-v等。並通過 CLIVagrantFile(配置文件)管理虛擬機的所有功能。vagrant 使用自己的鏡像格式進行環境部署,即box。類似於虛機的iso或者docker中的鏡像。

選擇vagrant+virualbox這個組合,因為它們都是開源的、跨平台的。vagrant搭建開發環境即簡單又強大。

安裝

官網下載安裝。其中virualbox可選擇安裝
VirtualBox Extension Pack。使用虛擬機需要BIOS 開啟虛擬化。

VirtualBox 官網

//www.virtualbox.org/

Vagrant 官網

//www.vagrantup.com/

BOX查找

//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庫。

下載地址:

//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 //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 //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": ["//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、插件、網路配置等可以在官網文檔找到。

Documentation | Vagrant by HashiCorp (vagrantup.com)

Tags: