流浪者指南
一、概述
在本教程中,我們將了解如何使用 Vagrant 管理我們的開發環境。我們將討論一些用例,了解 Vagrant 的基礎知識,然後嘗試不同的配置選項。
對於接下來的步驟,我們需要在我們的系統上安裝Vagrant。我們還需要VirtualBox才能運行示例。本教程使用 Vagrant 版本 2.3.2。
2.用例
Vagrant 幫助我們創建和配置虛擬機環境。我們可以一次描述我們的環境,並在我們想要重新創建它時使用該配置。因此,它可以加快項目的啟動過程並消除錯誤配置的風險。
我們甚至可以在本地鏡像生產環境。因此,我們的測試可以更加準確,並且可以減少部署應用程序時出現的意外問題的數量。這也有助於重現生產環境中出現的問題。
3. Vagrantfile
**Vagrant 使用一個特殊的配置文件來描述稱為Vagrantfile.
**命名背後的原因很簡單,這些配置文件的名稱應該是Vagrantfile.
每個項目我們可以有一個Vagrantfile
。然而,當我們運行 Vagrant 命令時,它會在我們的文件系統中尋找其他Vagrantfile
並合併相關的文件以構建最終配置。例如,我們可以在我們的 Vagrant 主目錄中有一個帶有一些默認配置的Vagrantfile
,並覆蓋項目目錄中的項目特定值。
Vagrantfile
使用Ruby 編程語言,但我們不一定需要了解 Ruby 來創建、理解或修改這些文件。大多數時候,我們使用簡單的操作,例如變量賦值。另一方面,如果我們熟悉 Ruby,我們可以利用它輕鬆創建更複雜的 Vagrantfile 。
讓我們在名為vagrant-start
的目錄中創建我們的 Vagrant 項目。我們可以使用init
命令在此目錄中創建一個初始的Vagrantfile
:
$ vagrant init hashicorp/bionic64
它產生以下輸出,我們可以在目錄中找到生成的Vagrantfile
:
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.configure("2") do |config|
config.vm.box = "hashicorp/bionic64"
end
**首先,我們可以看到配置的版本**: Vagrant.configure(“2”)
。這意味著 Vagrant 將使用配置對象的版本 2。這很重要,因為不同版本的 Vagrant 之間具有向後兼容性。
**在此之後,我們可以看到虛擬機的配置**: config.vm.box = “hashicorp/bionic64”.
這是一個簡單的變量賦值——我們設置 了盒子的名稱。該值正是我們在init
命令中提供的值。我們將在下一節中更詳細地討論盒子。
讓我們用validate
命令驗證我們的Vagrantfile
:
$ vagrant validate
輸出應如下所示:
Vagrantfile validated successfully.
每當我們對文件進行更改時,此命令都會很有用,我們希望確保它仍然有效。
4.盒子
在 Vagrant 中,環境的基礎圖像稱為盒子。這些是版本化的圖像,它們幫助我們快速克隆虛擬機。
在上一節中,我們創建了Vagrantfile
並將我們的框名稱設置為“ [hashicorp/bionic64](https://app.vagrantup.com/hashicorp/boxes/bionic64)
”。這是指 Ubuntu 18.04 LTS 環境。換句話說,我們可以通過簡單地使用這個盒子來啟動帶有Ubuntu的虛擬機。
我們可以在Vagrant Cloud中找到其他公共的、預定義的框。它們可以作為設置環境的良好起點。但是,我們必須要小心,因為只有兩種類型的官方盒子。這些是HashiCorp和Bento盒子。
我們甚至可以創建自己的 base box並將其上傳到 Vagrant Cloud。
4.1.管理郵箱
讓我們使用之前定義的Vagrantfile.
Vagrant 中的up
命令創建並配置我們的環境:
$ vagrant up
此命令下載指定框並啟動虛擬機:
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'hashicorp/bionic64' could not be found. Attempting to find and install...
default: Box Provider: virtualbox
default: Box Version: >= 0
==> default: Loading metadata for box 'hashicorp/bionic64'
default: URL: https://vagrantcloud.com/hashicorp/bionic64
==> default: Adding box 'hashicorp/bionic64' (v1.0.282) for provider: virtualbox
default: Downloading: https://vagrantcloud.com/hashicorp/boxes/bionic64/versions/1.0.282/providers/virtualbox.box
==> default: Successfully added box 'hashicorp/bionic64' (v1.0.282) for 'virtualbox'!
正如我們所見,Vagrant 在我們的機器上沒有找到這個盒子,所以它從 Vagrant Cloud 下載了它。為此,它必須查看盒子的元數據。盒子可以有一個可選的元數據文件,其中包含有關版本控制、提供者的信息,或者只是盒子的名稱和描述。
我們可以直接使用vagrant box
命令來管理盒子。讓我們列出下載的盒子:
$ vagrant box list
這意味著當我們稍後要使用它時,Vagrant 不需要再次下載這個盒子。
讓我們使用vagrant destroy
命令停止虛擬機:
$ vagrant destroy
此命令停止虛擬機並刪除所有相關資源。但是,下載的盒子在本地仍然可用。要刪除它們,我們需要運行vagrant box remove
命令。
5.供應商
Boxes 是 Vagrant 中的包格式,但我們需要提供程序才能運行它們。此外,盒子是特定於提供商的。這意味著僅為 Hyper-V 定義的 Vagrant 框與 VirtualBox 不兼容。然而,一個盒子可以支持多個提供者來克服這個限制。
在我們之前的示例中,我們使用了 VirtualBox,因為它是默認的提供程序。 Vagrant 默認支持三個提供者: VirtualBox 、 Hyper-V和Docker 。換句話說,默認情況下,我們可以在 Vagrant 環境中運行 VirtualBox 或 Hyper-V 虛擬機,甚至是 Docker 容器。
讓我們列出可用的框並檢查此命令的輸出:
$ vagrant box list
輸出包括兩個重要部分:
hashicorp/bionic64 (virtualbox, 1.0.282)
首先,我們可以看到我們在前面的例子中使用的盒子名稱。除此之外,括號中還有提供商和方框的版本。這是有用的信息,因此我們知道特定盒子使用哪個提供者。
可以使用 Vagrant 中的插件系統安裝其他提供程序。這應該是一個相當簡單的過程,因為CLI 提供了管理插件的命令。此外,我們可以開發新的自定義提供程序以進一步擴展我們的可能性。
6.供應
通常,簡單的盒子不足以滿足我們的用例。他們只為我們提供必需品。我們需要安裝和配置必要的組件以獲得有用的開發環境。我們可以每次都手動執行此操作,但這既費時又容易出錯。**供應使定制開發環境的過程自動化。當我們第一次使用vagrant up
命令創建環境時會發生這種情況,但我們也可以手動運行它。**
每個項目可以有多個供應商。最重要的是,還有不同類型的供應商。例如,我們可以運行 shell 腳本或將文件複製到虛擬機中。讓我們在Vagrantfile:
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/bionic64"
config.vm.provision "shell",
inline: "echo Hello from provisioner"
end
這會在配置運行時打印“ Hello from provisioner
”消息:
$ vagrant up
7. 網絡
我們在前面的步驟中成功創建並初始化了我們的開發環境,但是我們還不能訪問它。為了訪問機器,我們需要配置網絡。我們可以連接到專用或公共網絡或配置端口轉發。
最基本的配置選項是端口轉發。在這種情況下,我們在主機的端口上訪問來賓計算機的端口。
讓我們創建一個新的開發環境並對其進行配置。首先,對於我們的示例,我們需要創建一個名為“ provision.sh
”的新配置腳本,用於在創建環境時安裝 Nginx:
#!/usr/bin/env bash
apt-get -y update
apt-get install -y nginx
service nginx start
在此之後,讓我們創建一個使用此腳本進行配置的Vagrantfile
:
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/bionic64"
config.vm.provision :shell, path: "provision.sh"
config.vm.network "forwarded_port", guest: 80, host: 8080
end
我們使用Vagrantfile
中的“ config.vm.network
”設置將主機的8080
端口轉發到客戶機的80
端口。讓我們運行這個例子並在我們的瀏覽器中打開[http://localhost:8080/](http://localhost:8080/)
。我們可以看到 Nginx 歡迎屏幕,這意味著我們可以訪問虛擬機內部的 Web 服務器。
八、結論
在本文中,我們了解了 Vagrant,這是一個強大的工具,可幫助我們在項目中採用基礎架構即代碼實踐。我們使用虛擬機初始化了一個開發環境。
我們使用Vagrantfile
來指定我們想要運行哪個框,並使用配置來自動執行初始設置。最後,我們配置端口轉發以訪問虛擬機內的 Web 服務器。