顯示具有 Vagrant 標籤的文章。 顯示所有文章
顯示具有 Vagrant 標籤的文章。 顯示所有文章

為何要用 Docker

因為工作內容比較偏向程式開發這塊,當初接觸 Docker 也是很不能了解這跟一般的虛擬機器差在哪裡,就程式部署上去就好,幹嘛那麼麻煩?仔細回想過去一些覺得很麻煩的問題,答案就呼之欲出了!

  • 想要玩個新技術,但要先裝環境和函式庫,都弄好半天又過去了,還沒玩到新技術心就涼了。
  • 上述環境在公司弄好了,回家也想要玩,又要再弄一次。
  • 上述環境不小心裝壞了,比如說 mac 上同時裝 python 2 和 python 3,搞到自己原本的環境都爛了。
  • 整個專案要在自己的電腦,測試環境跑過,在上正式環境,部署之前把環境都弄成一模一樣就飽了。
  • 安裝時都有乖乖寫安裝手冊,過了半年要裝新的環境,卻發現半年前的函式庫抓不到了。
  • 設備移機...

以上問題只要使用 VM 就可以解決了,做好第一次安裝苦工,做成映像檔,以後就是利用映像檔複製出新的 VM。

那為什麼要用 Vagrant,因為第一次安裝用 VM 還是要走一次安裝流程(找 ubuntu.iso > 安裝 > 設定),更多的時候我只是要一個純命令列的 linux 環境再加個 SDK 和 Framework,透過 Vagrant 你可以在 http://www.vagrantbox.es/ 上找到別人做好的環境,不到三分鐘就可以做你真正想要做的事情,而不是一直在裝環境。

那為什麼要用 Docker,相較於 Vagrant 實際上是建立在 VMware / VirtualBox 上的虛擬化工具,Docker 是屬於作業系統層級的虛擬化,白話就是 Docker 更加輕量化的虛擬化工具,開啟速度快,吃的資源少(一台主機能開更多個 Docker 產生的虛擬機器),而且實際用起來跟 Vagrant 一樣好用。

個人不負責任白話解釋:
  • VMware / VirtualBox:第一次安裝還是要花時間,但裝完至少匯出映像檔可以重複利用。
  • Vagrant:用官方/別人分享的映像檔快速安裝環境,實際上還是會利用 VMware / VirtualBox 建立新的 VM。
  • Docker:用官方/別人分享的映像檔快速安裝環境,而且更快,更小。不用安裝 VMware / VirtualBox。
以下圖來舉例,若我突然要用 Tomcat 來寫 Java Web 專案,直接先找別人做好的 Docker 映像檔(ubuntu + JAVA SDK + tomcat),利用映像檔產生 Docker 容器(想成是一個 VM 即可),你可以連進 Docker 容器就像用 SSH 一樣進去下指令,透過 tomcat 網頁部署 jar 檔,開發到最後還能把整個 Docker 容器再做成一個新的映像檔,其他人只要有安裝 Docker,就能馬上在自己的電腦上把環境包含你寫的 Java Web 專案跑起來!超級方便!

Docker 應用場景

接下來會試著安裝自己的 Docker Registry(想成自己的 GitHub),模擬企業內部會採用的使用模式,RD 把應用程式跟環境包成映像檔上傳至 Registry,測試/部署人員直接在 Docker Registry 下載映像檔,複製出一樣的環境。

三分鐘用 Vagrant 裝好一個 Docker

單純裝 Docker 應該不用一分鐘,因為指令下完就裝好了,我因為不想弄髒我的環境,所以這邊在做的是,在我的筆電上用 Vagrant 建立一台安裝好 Docker 的 CentOS 7 虛擬機器。

Vagrant 是一個建立在 Virtual Box 之上的工具,可以很快從無到有用指令的方式安裝好一台乾淨的 Linux,而不需要從建立虛擬機器開始,然後還要下載 Linux 映像檔來安裝。

Docker 可以想成是一個更輕量級虛擬技術(啟動速度快,耗費資源少,存放空間小),也可以是想成是虛擬化技術的 GitHub。Docker 映像檔中除了專案外,還能包含專案所需要的環境,開發人員/測試人員/維運人員透過公開或自己架設的 Docker 映像檔倉庫,同步一模一樣的專案環境,如此可以減少環境設定造成的問題,也節省分別架設開發環境/測試環境/正式環境的時間。

廢話說很多,安裝方式請直接拉到最下方。關於 Docker 應用,等到自己玩幾個 Hello World 再來獻醜。



三分鐘用 Vagrant 裝好一個 Jenkins

標題殺人法,前提要先把下載過 Box 下載。在上一篇 用 Vagrant 建立 CentOS 6.4,我上網抓了一個 CentOS 6.4(64 位元)的 Box 到本機。

接著我們利用這個 Box 快速做出一個新的 VM 上面跑了 Jenkins。步驟參考下方 gist,然後實體機器瀏覽器打開 http://127.0.0.1:38080/ 就可以看到 Jenkins 老頭了。然後按照之前教的匯出 box,別人或是要搬到機房,就連三分鐘都不用,一分鐘就可以了。

螢幕快照 2014-11-07 上午11.28.19

用 Vagrant 建立 CentOS 6.4

個人有點系統潔癖,所以改用 VM 技術把環境隔離開,弄爛也不用煩惱。下面是從無到有一個 CentOS 6.4 的步驟。

用 Vagrant 的好處之一,是它很方便讓 Host(實體機器)和執行中的 VM 共用同一個資料夾,你就可以在 Host 上用 IDE 編輯專案,然後用 VM 去執行同一個專案。

建好的 VM 把套件工具都裝好後,也可以匯出成 Box,讓其他人直接使用。想得到的好處有,新人快速擁有開發環境,測試環境和生產環境都用同一份 Box 開始建立,在本機上建立好一個新系統就可以匯出在機房裏建立。

更進階的用途,Vagrant 可以在一個 Vagrant 專案下建立設定多台 VM,等於我可以在開發環境(開發環境夠力能跑那麼多 VM 的話)把整個系統架構用 Vagrant 做出來(比如這個系統要有一台 Apache,一台MySQL外加一台獨立的 FTP),測試環境/正式環境也有裝 Vagrant 的話,就直接搬過去用,免去了架設多主機的繁瑣步驟,理論上所有環境都是相同的,不會有在我電腦上可以你不行的問題發生。

Vagrant 再搭配 docker 這種更輕量級的虛擬技術,原本要跑三個 VM 的架構就可以改成跑一個上面跑三個 docker 的 VM,節省了更多資源。

同時 VM 環境建立也可以利用 Vaagrantfile + sh 的方式來做,搭配 git,這樣連建立環境的步驟都能夠版本控管,不用再寫文件記錄安裝手順。

初步來看,若一般需求,你裝個 Virtual Box 就可夠了。

但若你想保留安裝好所有套件的乾淨 VM,那用 Vagrant 的 Config 來做安裝套件(Config 即手順說明書),隨時都可以回復成有完整套件的乾淨 VM,而不是用備份或快照 VM 這種比較笨重的方式,而且備份快照其實已經不是個乾淨的 VM(資料庫已經有資料或是環境上已經有不需要的檔案)。

參考: