1+1>2:用Docker和Vagrant構建簡潔高效開發環境
原文 http://cloud.51cto.com/art/201503/470256.htm
Docker和Vagrant經常被認為是兩種相互替代的工具,其實它們可以結合使用,構建隔離的、可重復的開發環境。我們將證明該環境可以構建一個Docker容器以便開發Java應用程序,并充分利用Vagrant的強大功能,以解決一些現實當中的實際問題。
這篇博客的第一部分探討了開發環境的常見缺陷、簡單Docker環境的構建以及Vagrant+Docker配置具有的優點。但是如果你想就開始使用Docker和Vagrant,不妨直接跳到本文的這個章節:使用Vagrant,讓Docker容器易于移植。
開發環境有什么問題?
要花很長的時間來構建
新的開發人員要花多長時間才能構建好當前項目的開發環境?答案取決于諸多因素(項目時間、從事該項目的開發人員數量等),但至少需要半天時間并不罕見。
嘿!其實應該比這快得多:查看腳本,執行腳本。就是這樣。這兩個步驟應該足以構建你的環境,并準備隨時開發。
它可能與測試環境和生產環境大不一樣
你有沒有因構建的環境在機器上未通過而跳過自動化測試?或者更糟糕的是,即使更改的內容在機器上順利編譯,但是在持續整合(CI)服務器上老是失敗,你有沒有查過問題的根源出在哪里?
任何稍有不同,就會導致意料不到的行為。有的方法可能很簡單,比如試一試框架的上一個版本,或者改用不同的項目。
查明什么導致你的系統出現不同行為是每個開發人員都應該避免的煩人任務。
虛擬機和Docker
因而,開發環境應該具有兩個特點:
隔離:你不希望在測試某個新工具或不同項目時弄得一團糟。
可重復:同一個環境應該在每個團隊成員的機器、持續整合服務器和生產服務器上都一再可復制。
虛擬機環境確保了這些特性,可是典型的虛擬機很耗費資源。開發人員需要每隔幾分鐘編碼/構建/測試,不會接受虛擬化帶來的開銷。
這時候,Docker顯得大有幫助。相比典型的虛擬機,其輕型容器極其快速,而且在開發人員當中極受歡迎。下面是來自Docker博客的一段摘要,解釋了這種成功的原因:
使用Docker來配置的、可重復的開發環境
為了舉例說明,我們將構建一個構建并測試Vert.x HTTP服務器的Docker容器。
Vert.x是一種輕型應用程序框架,鼓勵小型、獨立微服務的架構。微服務“就是一種小巧的獨立式可執行程序,可與其他的獨立式可執行程序進行溝通”(Uncle Bob, http://blog.cleancoder.com/uncle-bob/2014/09/19/MicroServicesAndJars.html )。我們認為,它在Docker容器中再合適不過了,這就是為什么我們在此選擇它作為例子。
要是你之前還沒有安裝過Docker,先安裝它。你可以參閱官方文檔( https://docs.docker.com/installation/ ),或者使用get docker script( https://get.docker.io )來安裝它。我們假設在本章節中,我們在Linux上運行。即使Docker也可以安裝到Windows和Mac上(借助boot2docker),我們會在下一章中看到如何使用Vagrant來安裝、為什么Vagrant是一種更好的選擇。
</div> </div>