Deepin 安裝 Vagrant

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

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

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

二、Vagrant 使用

2.1、Vagrant 安裝

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

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

which gdebi

如果沒(méi)有這個(gè)軟件可以使用sudo apt install gdebi安裝
4.打開(kāi)下載目錄

cd ~/Downloads
ls

5.執(zhí)行安裝

sudo gdebi ./vagrant*.deb

6.最后測(cè)試安裝是否成功

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)該搞個(gè)系統(tǒng)鏡像;同樣 Vagrant 也需要先搞一個(gè) Vagrant Box,Vagrant Box 是一個(gè)已經(jīng)預(yù)裝好操作系統(tǒng)的虛擬機(jī)打包文件;根據(jù)不同系統(tǒng)可以選擇不同的 Vagrant Box,官方維護(hù)了一個(gè) Vagrant Box 倉(cāng)庫(kù),地址 點(diǎn)這里

vagrant boxes
vagrant boxes

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


box detail
box detail

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

box download url
box download url

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

2.3、啟動(dòng)一個(gè)虛擬機(jī)

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

其他幾個(gè)常用命令如下

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

三、Vagrantfile

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



Vagrant.configure("2") do |config|
# 定義虛擬機(jī)數(shù)量
vms = Array(1..5)
# 數(shù)據(jù)盤(pán)存放目錄
$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ī)的名稱(chēng)
v.name = "docker#{i}"
# 設(shè)置虛擬機(jī)的內(nèi)存大小
v.memory = 1536
# 設(shè)置虛擬機(jī)的CPU個(gè)數(shù)
v.cpus = 1
# 增加磁盤(pán)
docker_disk = "#$data_base_dir/docker-disk#{i}.vdi"
data_disk = "#$data_base_dir/data-disk#{i}.vdi"
# 判斷虛擬機(jī)啟動(dòng)后
if ARGV[0] == "up"
# 如果兩個(gè)文件都不存在 則創(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)建磁盤(pán)文件
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"
# 每次開(kāi)機(jī)后重啟 network 和 ssh,解決公網(wǎng)網(wǎng)卡不啟動(dòng)問(wèn)題
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


以上基本都加了注釋?zhuān)源笾聭?yīng)該很清晰,至于第一行那個(gè) `Vagrant.configure("2")` 代表調(diào)用第二版 API,不能改動(dòng),其他的可參考注釋同時(shí)綜合倉(cāng)庫(kù)中的其他配置文件即可

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

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

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

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