1. 程式人生 > >vagrant系列(1):使用vagrant線上/離線安裝centos7

vagrant系列(1):使用vagrant線上/離線安裝centos7

這裡寫圖片描述

Vagrant是一款用來構建虛擬開發環境的外掛工具,可以簡化虛擬機器配置和管理。它底層支援VirtualBox、VMware、AWS等,非常適合使用php/python/ruby/java語言開發web應用,“程式碼在我機子上執行沒有問題”這種說辭將成為歷史。

1. 安裝VirtualBox

2. 安裝Vagrant

去官網 https://www.vagrantup.com/downloads.html下載最新版的Vagrant,然後雙擊安裝,一直點選確認完成。在windows下安裝vagrant,為了寫入相應配置到環境變數,系統可能會要求重新啟動。在命令列中,輸入vagrant,檢視程式是不是已經運行了。如果不行,請檢查一下$PATH裡面是否包含vagrant所在的路徑

3. Vagrant命令詳解

命令 作用
vagrant box add 新增box的操作
vagrant init 初始化box的操作,會生成vagrant的配置檔案Vagrantfile
vagrant up 啟動本地環境
vagrant ssh 通過ssh登入本地環境所在虛擬機器
vagrant halt 關閉本地環境
vagrant suspend 暫停本地環境
vagrant resume 恢復本地環境
vagrant reload 修改了Vagrantfile後,使之生效(相當於先 halt,再 up)
vagrant destroy 徹底移除本地環境
vagrant box list 顯示當前已經新增的box列表
vagrant box remove 刪除相應的box
vagrant package 打包命令,可以把當前的執行的虛擬機器環境進行打包
vagrant plugin 用於安裝解除安裝外掛
vagrant status 獲取當前虛擬機器的狀態
vagrant global-status 顯示當前使用者Vagrant的所有環境狀態

4. 使用Vagrant安裝配置虛擬機器

4.1 box是什麼?

接下來,我們需要選擇使用何種作業系統,這裡以centos7.2為例。以前基於虛擬機器的工作流,我們需要下載ISO映象,安裝系統,設定系統等操作。而Vagrant開源社群提供了許多已經打包好的作業系統,我們稱之為box。你可以從box下載地址(下文列出),找到你想要的box,當然你也可以自己製作一個。

4.2 如何安裝一個box?

我們需要建立自己的開發環境目錄:

$ mkdir -p /Users/jackyue/data/vagrant/centos7

$ cd /Users/jackyue/data/vagrant/centos7

以下是匯入安裝說明:

$ vagrant box add {title} {url}

$ vagrant init {title}

$ vagrant up

vagrant box add是新增box的命令,{title}是以後建立虛擬機器的別名,{url}是下載到本地box的路徑,也可以是伺服器端的URL。

說明:將box映象新增到本地倉庫,有三種方式:

  • 使用http絕對地址
vagrant box add precises64 http://files.vagrantup.com/precise64.box
  • 使用本地檔案(從協議來說,和上面一樣,相當於file:///協議的地址)
vagrant box add precises64 ./precise64.box
  • 使用倉庫名稱
vagrant box add precises64 ubuntu/precise64

這種方式,vagrant會自動在中央倉庫查詢映象,並下載到本地映象庫中。

vagrant box add ubuntu/precise64

省略本地映象名稱,則直接用中央倉庫中的映象名作為本地映象名,這樣做的好處是可以跟倉庫中的映象對應。

4. 3 安裝centos7 box

$ cd /Users/jackyue/data/vagrant/centos7     //找到一個目錄,作為初始化目錄

$ vagrant box add centos7 /Users/jackyue/data/vagrant/centos/centos-7.0-x86_64.box       //建議採取離線安裝,這樣有利於放置虛擬機器檔案到指定路徑

==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos7' (v0) for provider: 
    box: Unpacking necessary files from: file:///Users/jackyue/data/vagrant/vagrant-centos-7.2.box
==> box: Successfully added box 'centos7' (v0) for 'virtualbox'!

box中的映象檔案被放到了/Users/jackyue/data/vagrant/.vagrant/machines/之下

4.4初始化映象

$ vagrant init centos7

//如果是新新增的box,必須執行本步驟,初始化一次之後,就不需要再執行本步驟

A `Vagrantfile` has been placed in this directory.
You are now ready to `vagrant up` your first virtual environment!
Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.

初始化成功後,vagrant會在當前的初始化目錄生成一個Vagrantfile配置檔案,我們可以修改它,進行個性化定製。在下一篇文章中,我們會具體講解關於Vagrantfile的配置。對於Vagrantfile檔案,我們可以直接編寫,或者從網路上拉取Vagrantfile檔案後,作為虛擬機器配置檔案,如下:

$ mkdir -p ~/vm/coreos

$ cd ~/vm/coreos

$ git clone https://github.com/coreos/coreos-vagrant.git

4.5 啟動系統

$ vagrant up 

// 第一次開啟的時候,建議一臺一臺地開啟,這樣的話方便記錄對映的本地埠號

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos7'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: centos7_default_1493108555390_12825
==> default: Clearing any previously set network interfaces...

4.6 SSH連線安裝的虛擬機器

經過以上操作後,我們完成了centos7虛擬機器的安裝,現在需要登入虛擬機器,進行操作,有以下三種方式:

  • 在開發環境的目錄(有Vagrantfile的地方),登入虛擬機器
$ vagrant ssh
  • 使用第三方工具,如secureCRT)或系統ssh命令進行登入,IP為Vagrantfile中指定的hostonly地址,使用者名稱與密碼預設都是vagrant

  • 在宿主機的命令列,ssh到本地埠的方式登入。觀察客戶機的22埠對映到宿主機的是多少,一般是2200或者2222,使用者名稱與密碼預設都是vagrant

$ ssh -p 2222 127.0.0.1

5. 打包分發

當你配置好開發環境後,退出並關閉虛擬機器。在終端裡,對虛擬機器打包

# vagrant halt         // 在開發環境的目錄,關閉centos7

# vagrant status       // 確認centos7關機

# vagrant package centos7 --output  centos7.box  --vagrantfile Vagrantfile

// --output NAME:(可選)設定通過NAME來指定輸出的檔名;--vagrantfile FILE:(可選)將Vagrantfile直接封進box中

注:如果網路模式中使用private_network的話,在打包之前需要清除一下private_network的設定,避免不必要的錯誤:rm -f /etc/udev/rule.d/70-persistent-net.rules

打包完成後會在當前目錄生成一個centos7.box的檔案,將這個檔案分發給其他使用者(開發者)。

其他使用者只要新增這個 box ,並用其初始化自己的開發目錄,就能得到一個一模一樣的開發環境了。

# vagrant box add centos7 centos7.box       

//新增package.box,映象命名為centos7

$ vagrant init centos7      

// 初始化centos7映象

$ vagrant up