介紹
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新增到物理機的本地庫中。
使用 vagrant init base
初始化。
調整 Vagrantfile 並通過 vagrant up
進行部署。
結語
擴充套件閱讀vagrant的CLI、VagrantFile、外掛、網路配置等可以在官網文件找到。