使用Vagrant管理虛擬機


 

 

為什么需要使用Vagrant管理虛擬機?

因為你開發的項目最終是要運行在 Linux 系統的服務器上,在開發的過程種,你可能需要創建多個 Linux 系統的虛擬機。所以,你打算在本地也用 Linux 系統為項目搭建一個開發環境,手工去安裝不同類型的 Linux 操作系統太麻煩了。你需要 Vagrant來統一管理這些虛擬機。

Vagrant 可以讓我們用命令直接從雲上下載虛擬機的鏡像,你想要什么系統都是可以的。比如Centos,Ubuntu …   只需要一行命令,然后再用命令去操作虛擬機,啟動,暫停,關閉,重啟。這樣你可以更方便的管理所有的在本地上電腦上的虛擬機鏡像,手工去配置它們,可以再重新打包成新的鏡像,方便你跟你的團隊在其它的項目上重復使用這些打包的虛擬機鏡像。

下面的內容是我在Window電腦去安裝Vagrant,然后管理虛擬機的相關筆記分享。
 

Vagrant管理虛擬機筆記目錄:

———————————
 

1.一些准備工作

為了能在Windows電腦上使用命令行工具,我們需要下載cmder工具或Windows電腦自帶的Powershell命令行工具。

1.1 使用cmder命令行工具,你可以在cmder官網去下載最新的cmder,然后放在你電腦的桌面上,解壓后,你會看到Cmder.exe,鼠標右鍵Cmder.exe已管理員方式運行,就就看到一個Cmder的命令行窗口,截圖如下圖所示。

Cmder截圖

Cmder截圖

 
Cmder運行的命令行窗口

Cmder運行的命令行窗口

 
1.2 如果你打算使用Windows電腦自帶的Powershell,你可以在電腦左下角,輸入Powershell,然后已管理員身份運行它。見下面截圖:
以管理員身份運行Powershell

以管理員身份運行Powershell

Powershell命令行窗口

Powershell命令行窗口

1.2.1 在Powershell命令行窗口輸入 Set-ExecutionPolicy Unresctricted 更改Powershell的執行策略,所下所示。
更改Powershell執行策略

更改Powershell執行策略

 
那么到這里,我們在Windows電腦上面命令行工具(Cmder或Powershell)就可以正常在Windows電腦上使用命令行進行操作了。
 

2.在Windows電腦安裝chocolately包管理工具

chocolately是一個包管理工具,你可以在它的 官網了解 chocolately更詳細的資料。
 

輸入命令:

iex ((New-Object System.Net.WebClient).DownloadString(‘https://chocolatey.org/install.ps1’))

進行自動安裝chocolately工具,安裝完之后,可以輸入 choco 查看一下版本,能看到版本信息就說明你已經安裝好了chocolately包管理工具。
chocolately安裝截圖

chocolately安裝截圖

3.在Windows電腦上安裝Vagrant軟件

命令 choco install vagrant
 

4.在Windows電腦上安裝Virtualbox軟件

命令 choco install virtualbox
 

5.給Vagrant添加BOX

默認我們是沒有虛擬機的鏡像BOX的,我們可以使用vagrant box list查看本地電腦項目可以使用的BOX列表,默認是空的。

下面我們去vagrant cloud網站去搜索一下我們想要的BOX,找到合適的BOX之后,復制一下BOX的名字,這里我找了一個

viniciusfs/ centos7的BOX。下面我們就來添加這個BOX.
添加BOX的命令是 vagrant box add viniciusfs/centos7   
[解釋:vagrant box add box 名稱]
安裝完成之后我們可以在使用  vagrant box list  來查看一下BOX列表。
查看BOX列表

查看BOX列表

6.在Windows電腦上創建項目目錄並在項目中啟動虛擬機

6.1在我們本地電腦的桌面創建一個vagrant-learning 的文件夾,用於存放我們的項目。
6.2運行Cmder或Powershell,然后進入到我們的這個項目所在的目錄,
    cd c:\User\Desktop\vagrant-learning       //進入到vagrant-learning這個項目目錄
    vagrant box list                             //查看可用的BOX列表
    vagrant init viniciusfs/centos7      //初始化BOX
    vagrant up                                    //啟動虛擬機
在項目里啟動虛擬機

在項目里啟動虛擬機

啟動虛擬機

啟動虛擬機

7.在Windows電腦上登陸CentOS服務器

7.1 在Powershell或Cmder命令行窗口,輸入 vagrant ssh  登陸CentOS服務器。
vagrant ssh登陸服務器

vagrant ssh登陸服務器

 
7.2 使用 XshellPutty來登陸CentOS服務器。默認服務器的IP地址是 127.0.0.1, ssh端口 2222,用戶名 vagrant,密碼vagrant
Putty輸入IP和端口

Putty輸入IP和端口

輸入密碼vagrant

輸入密碼vagrant

Putty成功登陸服務器

Putty成功登陸服務器

8.在Windows電腦上使用Vagrant對虛擬機進行啟動,關機,暫停,恢復,銷毀操作

啟動:     vagrant up
停止:     vagrant halt
暫停:  vagrant suspend
恢復: vagrant resume
重啟:     vagrant reload
銷毀: vagrant destroy
查看虛擬機狀態:  vagrant status
 

9.虛擬機的共享目錄

一般我們本地電腦的項目所在的文件夾就是和虛擬機同步的目錄,我們可以在項目的文件夾里面去創建文件,然后,虛擬機就可以執行我們本地電腦項目里面的文件。本地項目所在文件夾,這里是vagrant-learning則對應虛擬機的 /vagrant目錄,他們是同步的。下面我們可以來驗證一下。
 
9.1 在本地電腦項目文件夾vagrant-learning下面創建一個www文件夾,在www下創建index.html。
9.2 用編輯器打開index.html寫點內容,比如這里寫的內容是 “vagrant 學習”。
9.3 在Cmder或Powershell登陸虛擬機( vagrant ssh),然后 cd /vagrant 進入vagrant目錄,我們看到了我們在本地電腦手動創建的www文件夾。
9.4  cd www切換到www目錄, ls 查看一下www下的文件,我們看到了本地電腦創建的index.html文件。
9.5 cat index.html 查看index.html里面的內容,我們看到了,我們在本地電腦index.html里面寫的內容 “vagrant 學習”。
虛擬機上查看項目里的文件

虛擬機上查看項目里的文件

10.在Windows本地電腦給虛擬機創建額外的共享目錄

10.1 用編輯器打開我們的項目文件夾vagrant-learning下的Vagrantfile.
10.2 找到 “ # config.vm.synced_folder “../data”, “/vagrant_data ”這一行,把這一行最前面的#去掉。
10.3. 按回車,在這一行的下面輸入: create:true,owner:”root”,group:”root”  (意思是如果本地沒有data這個文件夾的話就創建一個data文件,文件夾的owner擁有着和group群組都屬於root)
10.4 保存並關閉Vagrantfile文件。
10.5 vagrant reload 重啟虛擬機。
10.6 vagrant ssh登陸虛擬機,進入根目錄 (cd /) ,ls-la可以看到多了一個vagrant_data的目錄,它和本地電腦的 data 是一組同步的目錄,vagrant_data的擁有者和群組都是root。
配置虛擬機共享目錄

配置虛擬機共享目錄

vagrant_data同步目錄

vagrant_data同步目錄

11.給虛擬機配置私有網絡

11.1 用編輯器打開本地項目vagrant-learning下的Vagrantfile。
11.2 找到  # config.vm.network “private_network”, ip: “192.168.33.10”  這一行,把最前面的#去掉,后面IP地址根據自己需要設置私有IP地址段的IP地址。我這里設置的是192.168.1.10
11.3 保存並關閉Vagrantfile.
11.4 vagrant reload重啟一下虛擬機。
11.5 ping一下我們剛剛配置的虛擬機IP地址,這里ping 192.168.1.10,我們看到可以ping通。
ping虛擬機IP地址

ping虛擬機IP地址

11.6 我們可以登陸進去虛擬機檢查一下虛擬機的IP地址。
vagrant ssh
ifconfig
ifconfig查看IP地址

ifconfig查看IP地址

12. 給虛擬機配置公有網絡

12.1 用編輯器打開項目vagrant-learning下的Vagrantfile.
12.2 找到 #config.vm.network “public_network” 這一行,把最前面的#去掉,保存文件。
12.3 vagrant reload 重啟虛擬機。
12.4 vagrant ssh登陸虛擬機,ifconfig查看一下現在虛擬機的IP地址。
12.5 exit虛擬機,ping虛擬機IP地址,看到可以ping通。
12.6 用局域網的其他電腦,ping虛擬機IP地址,應該也是可以ping通。說明公有網絡配置正確。
(圖略)

13. 在centos7虛擬機上搭建WEB服務器

sudo yum install httpd                           //安裝apach
sudo yum install vim                             //安裝vim編輯器
sudo vim /etc/httpd/conf/httpd.conf    //修改apach配置文件,更改網站根目錄為DocumentRoot /vagrant/www/
sudo service httpd start                        //啟動apach
sudo service httpd status                    //查看apach運行的狀態
sudo service httpd restart                  //重啟apach服務
sudo service httpd stop                   // 停止apach服務
(圖略)
 
 

14. 重新打包虛擬機BOX

重新打包BOX的目的是在以后的項目中可以復用,比如我們將安裝好apach服務的BOX打包,下次我們需要用到apach服務的虛擬主機的時候,直接初始化我們打包好的BOX,然后vagrant up啟動之后,就可以使用apach,就不用在去配置apach相關的東西了。
14.1 進入項目的目錄vagrant-learning,然后vagrant up啟動虛擬機。
14.2 刪除70-persistent-net.rules.
刪除70-persistent-net.rules

刪除70-persistent-net.rules

14.3 vagrant package打包虛擬機鏡像BOX。
vagrant package打包虛擬機鏡像BOX

vagrant package打包虛擬機鏡像BOX

14.4 添加我們打包的BOX
vagrant box add lihong/centos7 package.box
//lihong/centos7 是我定義的BOX的名稱, package.box是要添加的BOX
添加打包的package.box

添加打包的package.box

14.5 刪除打包生成的package.box文件。
rm -rf package.box
 
14.5 查看一下可用的BOX列表。
vagrant box list
 
刪除打包生成的package.box

刪除打包生成的package.box

 

15. 在新的項目上應用打包的虛擬機BOX

15.1 在本地電腦重新創建一個項目的目錄,比如lihong,並進入lihong這個目錄。
15.2 初始化我們打包后添加的BOX,這里我們定義打包后的BOX名字是lihong/centos7
vagrant init lihong/centos7
初始化打包的BOX

初始化打包的BOX

15.3 查看打包后運行的BOX是否裝了apach
查看apach狀態

查看apach狀態

 

16.在Windows電腦上用Vagrant定義多主機

16.1 在桌面上創建一個新的工作項目目錄workflow-project.
16.2 進入這個目錄,vagrant box list查看一下可以使用的box,如下 (lihong/centos7這個BOX是我自己打包的BOX,我們后面使用這個BOX)
workflow-project可用的BOX

workflow-project可用的BOX

16.3在workflow-project項目下初始化 lihong/centos7這個BOX,它會在workflow-project文件夾下面創建一個vagrantfile的文件。
 
16.4 使用編輯器打開workflow-project這個目錄下邊的Vagrantfile文件,分別定義development和production這兩台主機。配置方法如下截圖所示。
配置development和production主機

配置development和production主機

16.5 查看這2台虛擬機的狀態。vagrant status
多主機的not create狀態

多主機的not create狀態

16.6 啟動這兩台主機。

vagrant up (它會同時啟動development ,production這2台主機)

如果要啟動其中的某一台,我們使用命令 vagrant up developement來單獨啟動development 這台主機。如果想SSH進入某台主機可以使用命令 vagrant ssh development (這個命令是ssh登陸development 這台主機)
啟動完成之后,我們再來看一下vagrant status,這2台主機都已經處於running運行狀態了。
多主機running狀態

多主機running狀態

 

17.多主機的網絡配置

17.1 用編輯器打開工作項目的目錄workflow下的Vagrantfile。
17.2 在Vagrantfile給2台主機設置IP地址。具體設置參考下面截圖。
這里我們給2台主機定義私有網絡IP地址。兩台IP地址分別為192.168.2.100, 192.168.2.101
(值得注意的是,IP地址要和你本地電腦的IP地址處於不同的網段)
 
給多主機配置IP地址

給多主機配置IP地址

17.3 vagrant reload重啟虛擬主機。
 
17.4 在SSH連接到這2台主機。vagrant ssh development , vagrant ssh production。
然后用ifconfig命令來查看一下development和production主機的IP地址。
查看development主機的IP地址

查看development主機的IP地址

查看production主機的IP地址

查看production主機的IP地址

17.5 站在development 主機上測試是否可以ping通production主機的IP地址192.168.2.101。
站在development上ping一下production主機的IP地址

站在development上ping一下production主機的IP地址

 
17.6 反過來,站在production主機上測試一下是否可以ping通development主機的IP地址192.168.2.100。
站在production主機ping一下development主機的IP地址

站在production主機ping一下development主機的IP地址

18.多主機的主機名設置

18.1 我們先SSH登陸主機,輸入命令 hostname查看一下現在的主機名。
hostname查看主機名

hostname查看主機名

 
18.2 在定義這2台主機的Vagrantfile里面去設置一下這兩台主機的主機名。
定義多主機名

定義多主機名

 
18.3 vagrant reload 重啟一下這2台主機。然后重新SSH登陸,看一下hostname.
重新查看主機名

重新查看主機名

重新查看主機名2

重新查看主機名2

 
備注:我們也可以通過network文件進行修改主機名:
vi /etc/sysconfig/network
service network restart
 
 

19.多主機的共享目錄設置

默認多主機使用項目所在的目錄作為虛擬機和本地電腦的同步目錄。這里默認就是,本地電腦的同步目錄是workflow-project, 2台虛擬主機development,production主機根目錄下的vagrant 目錄。
我們的任務是給development , production分別創建2個不同的同步共享目錄。
 
19.1 在項目的目錄分別創建development ,production 文件夾。
本地項目的目錄下創建2個同步目錄

本地項目的目錄下創建2個同步目錄

19.2 編輯Vagrantfile,設置同步的目錄。
在Vagrantfile中設置同步目錄

在Vagrantfile中設置同步目錄

19.3 vagrant reload重啟主機。
 
19.4 然后我們在本地電腦development下放一個index.html
本地development同步目錄下添加文件

本地development同步目錄下添加文件

19.5 vagrant ssh development 登陸development主機查看 /vagrant 是否有這個文件,如果有就同步成功了。如下截圖。
在development主機查看同步目錄vagrant是否有本地添加的文件

在development主機查看同步目錄vagrant是否有本地添加的文件

 
 
哇噢,寫到現在寫了好久,太累了,休息一下。你學會了嗎?如果有問題可以在下方留言,相互交流


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM