Deepin 安裝 Vagrant

最近服務(wù)器老是宕機(jī),學(xué)習(xí)的時候很多環(huán)境有需要集群,忍無可忍的情況下終于決定自己裝一波虛擬機(jī)宮學(xué)習(xí)使用。本人系統(tǒng)為Deepin,這里記錄一下Deepin安裝Vagrant的過程及步驟.

Reference One: https://mritd.me/2017/03/01/how-to-use-vagrant/
Reference Two: https://tutorialforlinux.com/2017/10/11/how-to-install-vagrant-deepin-linux-easy-guide/

Vagrant 是一個開源的 基于 ruby 的開源虛擬機(jī)管理工具;
它能夠以腳本化的方式啟動、停止、和和刪除虛擬機(jī),當(dāng)然這些手動也沒費(fèi)勁;更重要的是它能夠自己定義網(wǎng)絡(luò)分配、初始化執(zhí)行的腳本、添加硬盤等各種復(fù)雜的動作;最重要的是 Vagrant 提供了類似于 docker image 的 box;Vagrant Box 就是一個完整的虛擬機(jī)分發(fā)包,可以自己制作也可以從網(wǎng)絡(luò)下載;并且 Vagrant 開源特性使得各路大神開發(fā)了很多 Vagrant 插件方便我們使用,基于以上這些特點(diǎn),我們可以實(shí)現(xiàn):

  • 一個腳本定義好虛擬機(jī)的數(shù)量
  • 一個腳本定義好虛擬機(jī)初始化工作,比如裝 docker
  • 一個腳本完成多臺虛擬機(jī)網(wǎng)絡(luò)配置
  • 一條命令啟動、停止、刪除多個虛擬機(jī)
How to Install Vagrant Deepin Linux - Featured

二、Vagrant 使用

2.1、Vagrant 安裝

Vagrant 安裝極其簡單,目前官方已經(jīng)打包好了各個平臺的安裝包文件,地址訪問 Vagrant 官方下載地址;

這里以Deepin為例:
1.打開終端Ctr+Alt+t
2.Download Latest Vagrant for Debian Linux下載最新版本Vagrant
Here Get Latest Vagrant .deb 32/64bit
3.檢查是否含有GDebi Package.

which gdebi

如果沒有這個軟件可以使用sudo apt install gdebi安裝
4.打開下載目錄

cd ~/Downloads
ls

5.執(zhí)行安裝

sudo gdebi ./vagrant*.deb

6.最后測試安裝是否成功

vagrant -h 

But in case of Vagrant Help Ruby Gems Issue Fix with:
sudo vagrant plugin ``install vagrant-share \``--plugin-version 1.1.8
7.至于Oracle VirtualBox安裝,可以點(diǎn)擊這里
8.至于Vagrant怎么使用和管理,可以點(diǎn)擊這里.

2.2、Vagrant Box 下載

裝虛擬機(jī)大家都不陌生,首先應(yīng)該搞個系統(tǒng)鏡像;同樣 Vagrant 也需要先搞一個 Vagrant Box,Vagrant Box 是一個已經(jīng)預(yù)裝好操作系統(tǒng)的虛擬機(jī)打包文件;根據(jù)不同系統(tǒng)可以選擇不同的 Vagrant Box,官方維護(hù)了一個 Vagrant Box 倉庫,地址 點(diǎn)這里

vagrant boxes
vagrant boxes

點(diǎn)擊對應(yīng)的系統(tǒng)后可以看到如下界面


box detail
box detail

該頁面羅列出了使用不同虛擬機(jī)時應(yīng)當(dāng)使用扥添加明令;當(dāng)然執(zhí)行這些命令后 vagrant 將會從網(wǎng)絡(luò)下載這個 box 文件并添加到本地 box 倉庫;不過眾所周知的原因,這個下載速度會讓你懷疑人生,所有簡單的辦法是執(zhí)行以下這條命令,然后會顯示 box 的實(shí)際下載地址;拿到地址以后用迅雷下載先把文件下載下來,然后使用 vagrant 導(dǎo)入也可以(centos7 本地已經(jīng)有了一下以 ubuntu 為例)

box download url
box download url

下載后使用 vagrant box add xxxx.box 即可將 box 導(dǎo)入到本地倉庫

2.3、啟動一個虛擬機(jī)

萬事俱備只差東風(fēng),在上一步執(zhí)行 vagrant init ubuntu/trusty64; vagrant up --provider virtualbox 命令獲取 box 下載地址時,已經(jīng)在當(dāng)前目錄下生成了一個 Vagrantfile 文件,這個文件其實(shí)就是虛擬機(jī)配置文件,具體下面再說;box 導(dǎo)入以后先啟動一下再說,執(zhí)行 vagrnat up 即可

其他幾個常用命令如下

  • vagrant box [list|add|remove] 查看添加刪除 box 等
  • vagrant up 啟動虛擬機(jī)
  • vagrant halt 關(guān)閉虛擬機(jī)
  • vagrant init 初始化一個指定系統(tǒng)的 Vagrantfile 文件
  • vagrant destroy 刪除虛擬機(jī)
  • vagrant ssh ssh 到虛擬機(jī)里
    特別說明一下 ssh 這個命令,一般默認(rèn)的規(guī)范是 vagrant ssh VM_NAME 后,會以 vagrant 用戶身份登錄到目標(biāo)虛擬機(jī),如果當(dāng)前目錄的 Vagrantfile 中只有一個虛擬機(jī)那么無需指定虛擬機(jī)名稱(init 后默認(rèn)就是);虛擬機(jī)內(nèi)(box 封裝時)vagrant這個用戶擁有全局免密碼 sudo 權(quán)限;root 用戶一般密碼為 vagrant

三、Vagrantfile

直接貼 Vagrantfile,以下配置在進(jìn)行 vagrant up 之前可能需要使用 vagrant plugin install vagrant-host 插件,以支持自動在各節(jié)點(diǎn)之間添加 host



Vagrant.configure("2") do |config|
# 定義虛擬機(jī)數(shù)量
vms = Array(1..5)
# 數(shù)據(jù)盤存放目錄
$data_base_dir = "/data/vm/disk"
vms.each do |i|
config.vm.define "docker#{i}" do |docker|
# 設(shè)置虛擬機(jī)的Box
docker.vm.box = "centos/7"
# 不檢查 box 更新
docker.vm.box_check_update = false
# 設(shè)置虛擬機(jī)的主機(jī)名
docker.vm.hostname="docker#{i}.node"
# 設(shè)置虛擬機(jī)的IP (wlp2s0 為橋接本機(jī)的網(wǎng)卡)
docker.vm.network "public_network", ip: "192.168.1.1#{i}", bridge: "wlp2s0"
# 設(shè)置主機(jī)與虛擬機(jī)的共享目錄
#docker.vm.synced_folder "~/Desktop/share", "/home/vagrant/share"
# VirtaulBox相關(guān)配置
docker.vm.provider "virtualbox" do |v|
# 設(shè)置虛擬機(jī)的名稱
v.name = "docker#{i}"
# 設(shè)置虛擬機(jī)的內(nèi)存大小
v.memory = 1536
# 設(shè)置虛擬機(jī)的CPU個數(shù)
v.cpus = 1
# 增加磁盤
docker_disk = "#$data_base_dir/docker-disk#{i}.vdi"
data_disk = "#$data_base_dir/data-disk#{i}.vdi"
# 判斷虛擬機(jī)啟動后
if ARGV[0] == "up"
# 如果兩個文件都不存在 則創(chuàng)建 SATA 控制器(這里調(diào)用的是 Virtual Box 的命令)
if ! File.exist?(docker_disk) && ! File.exist?(data_disk)
v.customize [
'storagectl', :id,
'--name', 'SATA Controller',
'--add', 'sata',
'--portcount', '5',
'--controller', 'IntelAhci',
'--bootable', 'on'
]
end
# 創(chuàng)建磁盤文件
if ! File.exist?(docker_disk)
v.customize [
'createhd',
'--filename', docker_disk,
'--format', 'VDI',
'--size', 10 * 1024 # 10 GB
]
end
if ! File.exist?(data_disk)
v.customize [
'createhd',
'--filename', data_disk,
'--format', 'VDI',
'--size', 10 * 1024 # 10 GB
]
end
# 連接到 SATA 控制器
v.customize [
'storageattach', :id,
'--storagectl', 'SATA Controller',
'--port', 1, '--device', 0,
'--type', 'hdd', '--medium',
docker_disk
]
v.customize [
'storageattach', :id,
'--storagectl', 'SATA Controller',
'--port', 2, '--device', 0,
'--type', 'hdd', '--medium',
data_disk
]
end
end
# 增加各節(jié)點(diǎn) host 配置
config.vm.provision :hosts do |provisioner|
vms.each do |x|
provisioner.add_host "192.168.1.1#{x}", ["docker#{x}.node"]
end
end
# 自定義執(zhí)行腳本
docker.vm.provision "shell", path: "init.sh"
# 每次開機(jī)后重啟 network 和 ssh,解決公網(wǎng)網(wǎng)卡不啟動問題
docker.vm.provision "shell", run: "always", inline: <<-SHELL
systemctl restart network
systemctl restart sshd
echo -e "\033[32mvirtual machine docker#{i} init success!\033[0m"
SHELL
end
end
end


以上基本都加了注釋,所以大致應(yīng)該很清晰,至于第一行那個 `Vagrant.configure("2")` 代表調(diào)用第二版 API,不能改動,其他的可參考注釋同時綜合倉庫中的其他配置文件即可

**Vagrantfile 實(shí)質(zhì)上就是一個 ruby 文件,可以自己在里面定義變量等,可以在里面按照 ruby 的語法進(jìn)行各種復(fù)雜的操作;具體 ruby 語法可以參考相關(guān)文檔學(xué)習(xí)一下**
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1,介紹Vagrant 我們做web開發(fā)的時候經(jīng)常要安裝各種本地測試環(huán)境,比如apache,php,mysql,r...
    meng_philip123閱讀 2,665評論 0 12
  • Vagrant是什么 Vagrant是一個軟件,可以自動化虛擬機(jī)的安裝和配置流程。目前市面上個人PC的主流操作系統(tǒng)...
    北魏企鵝閱讀 30,484評論 3 40
  • 什么是Vagrant簡單來說,Vagrant 就是一個虛擬機(jī)的集成管理器。 我們用它可以快速創(chuàng)建虛擬機(jī),可以快速部...
    嗝喯唲閱讀 710評論 0 0
  • 開發(fā)需要在各種系統(tǒng)上進(jìn)行開發(fā)任務(wù),運(yùn)維則需要在各種系統(tǒng)上學(xué)習(xí)工具使用。因此,虛擬機(jī)恐怕也是 IT 人員最常使用的工...
    李廣慧閱讀 5,694評論 3 24
  • 深夜食堂——這世界唯有美食和美景不可辜負(fù) 深夜食堂的男主角是小林薰,有著日式中年男人的內(nèi)斂、干凈和包容。日本人做事...
    Emily姐姐閱讀 1,745評論 0 1

友情鏈接更多精彩內(nèi)容