1. 程式人生 > >Docker學習筆記 — Docker應用場景總結

Docker學習筆記 — Docker應用場景總結

學習Docker也有一段時間了,瞭解了Docker的基本實現原理,也知道了Docker的使用方法,這裡對Docker的一些典型應用場景做一個總結吧。如果發現有新的應用場景,再對筆記進行更新。

當前,Docker主要還使用在簡化開發流程和運維上面,貌似還算不上雲端計算技術,其在資源隔離和配額限制方面的潛力還尚未被挖掘出來,希望未來Docker能夠像OpenStack一樣在雲端計算領域佔據重要地位。

配置簡化

這是Docker的主要使用場景。將應用的所有配置工作寫入Dockerfile中,建立好映象,以後就可以無限次使用這個映象進行應用部署了。這大大簡化了應用的部署,不需要為每次部署都進行繁瑣的配置工作,實現了一次打包,多次部署。

這大大加快了應用的開發效率,使得程式設計師可以快速搭建起開發測試環境,不用關注繁瑣的配置工作,而是將所有精力都儘可能用到開發工作中去。

程式碼流水線管理

程式碼從開發環境到測試環境再到生產環境,需要經過很多次中間環節,Docker給應用提供了一個從開發到上線均一致的環境,開發測試人員均只需關注應用的程式碼,使得程式碼的流水線變得非常簡單,這樣應用才能持續整合和釋出。

快速部署

在虛擬機器之前,引入新的硬體資源需要消耗幾天的時間。Docker的虛擬化技術將這個時間降到了幾分鐘,Docker只是建立一個容器程序而無需啟動作業系統,這個過程只需要秒級的時間。

應用隔離

資源隔離對於提供共享hosting服務的公司是個強需求。 如果使用VM,雖然隔離性非常徹底,但部署密度相對較低,會造成成本增加。

Docker容器充分利用linux核心的namespace提供資源隔離功能。結合cgroups,可以方便的設定每個容器的資源配額。既能滿足資源隔離的需求,又能方便的為不同級別的使用者設定不同級別的配額限制。

伺服器資源整合

正如通過VM來整合多個應用,Docker隔離應用的能力使得Docker同樣可以整合伺服器資源。由於沒有額外的作業系統的記憶體佔用,以及能在多個例項之間共享沒有使用的記憶體,Docker可以比VM提供更好的伺服器整合解決方案。

通常資料中心的資源利用率只有30%,通過使用Docker並進行有效的資源分配可以提高資源的利用率。

多版本混合部署

隨著產品的不斷更新換代,一臺伺服器上部署多個應用或者同一個應用的多個版本在企業內部非常常見。

但一臺伺服器上部署同一個軟體的多個版本,檔案路徑、埠等資源往往會發生衝突,造成多個版本無法共存的問題。

如果用docker,這個問題將非常簡單。由於每個容器都有自己獨立的檔案系統,所以根本不存在檔案路徑衝突的問題; 對於埠衝突問題,只需要在啟動容器時指定不同的埠對映即可解決問題。

版本升級回滾

一次升級,往往不僅僅是應用軟體本身的升級,通過還會包含依賴項的升級。 但新舊軟體的依賴項很可能是不同的,甚至是有衝突的,所以在傳統的環境下做回滾一般比較困難。

如果使用docker,我們只需要每次應用軟體升級時製作一個新的docker映象,升級時先停掉舊的容器, 然後把新的容器啟動。 需要回滾時,把新的容器停掉,舊的啟動即可完成回滾,整個過程各在秒級完成,非常方便。

內部開發環境

在容器技術出現之前,公司往往是通過為每個開發人員提供一臺或者多臺虛擬機器來充當開發測試環境。開發測試環境一般負載較低,大量的系統資源都被浪費在虛擬機器本身的程序上了。

Docker容器沒有任何CPU和記憶體上的額外開銷,很適合用來提供公司內部的開發測試環境。而且由於Docker映象可以很方便的在公司內部共享,這對開發環境的規範性也有極大的幫助。

PaaS

使用Docker搭建大規模叢集,提供PaaS。這一應用是最有前景的一個了,目前已有很多創業公司在使用Docker做PaaS了,例如雲雀雲平臺。使用者只需提交程式碼,所有運維工作均由服務公司來做。而且對使用者來說,整個應用部署上線是一鍵式的,非常方便。

雲桌面

在每一個容器內部執行一個圖形化桌面,使用者通過RDP或者VNC協議連線到容器。該方案所提供的虛擬桌面相比於傳統的基於硬體虛擬化的桌面方案更輕量級,執行速率大大提升。不過該方案仍處於實驗階段,不知是否可行。可以參考一下Docker-desktop方案