實務上用 Docker的幾種情境

實務上用 Docker的幾種情境

Docker 是一個火紅的技術,這篇文章主要說明Docker筆者經歷或是看過的幾種實務上的用法。

Docker 可以想像是另外一種提供虛擬環境的方式。與VMware Image最大不同的是,

Docker檔案因為不需要包含整個作業系統,因此檔案很小,啟動速動也很快,就像啟動應用程式。

相對VMware Image來說,因為包含整個作業系統,因此檔案通常好幾G以上,啟動速動必須做完整的開機動作。

所以Docker更適合”即時”提供所需要的虛擬環境。隨時啟動並且釋放資源。

Docker 實務上有哪些用法呢?為什麼用Docker 不使用傳統 Virtual Machine? 筆者分述如下。

為什麼用Docker?

1. Infrastructure as Code

Docker由於可以透過 “Dockerfile”的文字定義檔,直接產生出Docker Image。

因此,需要什麼環境、設定、安裝什麼、執行什麼Scripts都可以定義在這個Dockerfile 中,

環境的大量佈署或是系統的修改,都透過 Dockerfile文字定義檔。因此,系統的修改就可以更容易做到版本的控管。

如果單純就這個原因使用Docker,還有其他替代方案就是 puppet or Chef。

2. 更即時的提供所需環境

Virtual Machine (VMware or Virtual Box) 由於是整個作業系統啟動,因此開機時間較長。

Docker Image 由於實質上是應用程式啟動,因此啟動時間快速。可以在需要的時候再啟動該環境即可。

3. 資源占用小,啟動與分享更容易

Virtual Machine 包含整個作業系統,所以檔案很大,所占的資源 (CPU, Disk, Memory)也相對比較多。

Docker Image 實質上只是應用程式層,不包含整個作業系統。因此檔案相對較小(150MB~300MB)左右。

4. 開發、測試與上線環境一致DevOps

在Docker Image環境中開發,可以直接將該Image分享。

QA直接拿到這個 Docker Image測試,上線也可以直接將該Docker Image 佈署在線上環境即可。

另外如果要測試開發不同版本間的相容性也比較容易,不需要準備多個Virtual Machine。

只需要準備每一個Docker Image 即可。

 

使用情境

1. Running Service

傳統使用 Virtual Machine,我們可能會因為 Apache or MySQL 各準備一個Virtual Machine 來提供相關的服務。

因為Virtual Machine 包含整個作業系統,因此多個 Virtual Machine 相對的耗用較多的系統資源。

使用 Docker 僅需要準備 Apache Docker Image與 MySQL Docker Image分別啟動即可。

(Docker Image 啟動之後稱為 “Containers” = Running Image)

 

2. CI Build Delivery

可以用在與 Source Code & Jenkins Build 的整合。

想像如果該應用程式需要 build 在多種 Linux平台,是不是要準備許多 Virtual Machine環境? 設定與維護都是困難。

使用 Docker 可以動態啟動這些所有不同的 Linux 平台,也讓環境管理變得容易

 

3. On-Demand Testing Environment

舉例來說,Selenium GRID 的應用。

我們的自動化測試希望可以佈署在 FireFox, Chrome, IE與不同的 windows/Linux 執行。傳統的做法需要準備很多VirtualMachine

透過 Docker 可以即時啟動所需要的環境,

另外,由於 Docker Image 通在同一台電腦上執行,也可以減少因為網路所帶來的連線問題。

 

4. Development & Testing & Production Consistency

由於Docker 可以跨平台。

因此,只要是該環境有安裝 docker Engine

都可以順利的執行 Docker Image (完全不用設定!)

因此,應用程式與相關的環境設定就可以整個打包為 Docker Image

對於客戶或是線上執行來說,只要將該Docker Image啟動直接可以執行,

也不需要環境或是系統的設定。(因為環境設定已經定義在 Docker Image or Dockerfile中)

是不是很方便的應用程式佈署與上線的方式呢?

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *