05.23 開始 Vagrant 之旅

開始 Vagrant 之旅

編譯自: https://opensource.com/article/18/4/getting-started-vagrant

用管理虛擬機和容器的工具 Vagrant 清理你的開發環境和依賴。

如果你和我一樣,你可能在某一個地方有一個“沙盒”,你可以在那裡進行你正在做的任何項目。隨著時間的推移,沙盒會變得雜亂無章,充斥著各種想法、工具鏈元素、你不使用的代碼模塊,以及其他你不需要的東西。當你完成某件事情時,這會使你的部署變得複雜,因為你可能不確定項目的實際依賴關係 —— 隨著時間推移你在沙盒中已經有了一些工具,但是你忘了必須安裝它。你需要一個乾淨的環境,將所有的依賴關係放在一個地方,以便以後更方便。

或者你可能工作在 DevOps 中,你所服務的開發人員用模糊的依賴關係來編寫代碼,這使得測試變得更加困難。你需要一種方法來獲得一個乾淨的盒子,將代碼放入其中,並通過它運行代碼,而且你希望這些環境是一次性的和可重複的。

那麼選擇 Vagrant 吧。由 HashiCorp 在 MIT 許可證 下創建,Vagrant 可充當 VirtualBox、Microsoft Hyper-V 或 Docker 容器的包裝器和前端,並且可以通過 許多其他供應商 的插件進行擴展。你可以配置 Vagrant 以提供可重複的、乾淨的環境,並且已安裝需要的基礎架構。配置腳本是可移植的,因此,如果你的倉庫和 Vagrant 配置腳本位於基於雲存儲上,那麼你只需要很少的限制就可以啟動並在多臺機器機器上工作。讓我們來看一看。

安裝

對於本次安裝,我的環境是 Linux Mint 桌面,版本是 18.3 Cinnamon 64 位,在其他大多數 Debian 派生系統上安裝非常類似。在大多數發行版中,對於基於 RPM 的系統也有類似的安裝程序。Vagrant 的 安裝頁面 為 Debian、 Windows、 CentOS、 MacOS 和 Arch Linux 都提供下載,但是我在我的軟件包管理器中找到了它,所以我在那進行了安裝。

最簡單的安裝使用了 VirtualBox 作為虛擬化提供者,所以我需要安裝它:

sudo apt-get install virtualbox vagrant

安裝程序將會獲取依賴項 —— 主要是 Ruby 的一些東西,安裝它們。

建立一個項目

在設置你的項目之前,你需要了解一些你想要運行它的環境。你可以在 Vagrant Boxes 倉庫 中找到為許多虛擬化供應商提供的大量預配置的 系統(box)。許多會預先配置一些你可能需要的核心基礎設置,比如 PHP、 MySQL 和 Apache,但是對於本次測試,我將安裝一個 Debian 8 64 位 “Jessie” 裸機沙盒並手動安裝一些東西,這樣你就可以看到具體過程了。

mkdir ~/myproject

cd ~/myproject

vagrant init debian/contrib-jessie64

vagrant up

最後一條命令將根據需要從倉庫中獲取或更新 VirtualBox 鏡像,然後運行啟動器,你的系統上會出現一個運行的系統!下次啟動這個項目時,除非鏡像已經在倉庫中更新,否則不會花費太長時間。

要訪問該沙盒,只需要輸入 vagrant ssh,你將進入虛擬機的全功能 SSH 會話中,你將會是 vagrant 用戶,但也是 sudo 組的成員,所以你可以切換到 root,並在這裡做你想做的任何事情。

你會在沙盒中看到一個名為 /vagrant 目錄,對這個目錄小心點,因為它與你主機上的 ~/myproject 文件夾保持同步。在虛擬機 /vagrant 下建立一個文件它會立即複製到主機上,反之亦然。注意,有些沙盒並沒有安裝 VirtualBox 的附加功能,所以拷貝只能在啟動時才起作用。有一些用於手動同步的命令行工具,這可能是測試環境中非常有用的特性。我傾向於堅持使用那些有附加功能的沙盒,所以這個目錄可以正常工作,不必考慮它。

這個方案的好處很快顯現出來了: 如果你在主機上有一個代碼編輯工具鏈,並處於某種原因不希望它出現在虛擬機上,那麼這不是問題 —— 在主機上進行編輯,虛擬機會立刻更改。快速更改虛擬機,它也將其同步到主機上的“官方”副本 。

讓我們關閉這個系統,這樣我們就可以在這個系統裡提供一些我們需要的東西:

vagrant halt

在虛擬機上安裝額外的軟件

對於這個例子,我將使用 Apache 、 PostgreSQL 和 Perl 的 Dancer web 框架進行項目開發。我將修改Vagrant 配置腳本,以便我需要的東西已經安裝。 為了使之稍後更容易保持更新,我將在項目根目錄下創建一個腳本~/myproject/Vagrantfile:

$provision_script = <


分享到:


相關文章: