1. 程式人生 > >Docker實踐(二)

Docker實踐(二)

Docker來源

隨著網際網路的極速發展,應用程式的功能越來越豐富,而需要迭代的速度要求也越來越高,為了實現這些目標,應用的開發逐漸趨向服務化甚至微服務化。微服務化對應用程式進行拆分,導致這個應用的執行環境會變得越來越複雜,尤其是應用程式比較大、涉及服務比較多的時候,極大的增加了開發、測試和運維人員的對環境搭建的難度。此外,服務的叢集化部署,需求更高的效率。

Docker 專案是一個由 Go 語言實現的容器引擎,它最初由 dotCloud 這家做雲服務的公司在 2013 年開源。Docker容器化的技術,能夠將應用程式放置在相同的執行環境中,極大簡化了對外在執行環境的需求。

Docker 的技術實現

Docker 的實現,主要歸結於三大技術:名稱空間 ( Namespaces ) 、控制組 ( Control Groups ) 和聯合檔案系統 ( Union File System )

名稱空間:名稱空間是 Linux 核心在 2.4 版本後逐漸引入的一項用於執行隔離的模組。Linux 核心的名稱空間,就是能夠將計算機資源進行切割劃分,形成各自獨立的空間。就實現而言,Linux Namespaces 可以分為很多具體的子系統,如 User Namespace、Net Namespace、PID Namespace、Mount Namespace 等。通過 PID Namespace,可以造就一個獨立的程序執行空間,在其中程序的編號又會從 1 開始。在這個空間中執行的程序,完全感知不到外界系統中的其他程序或是其他程序名稱空間中執行的程序。

資源控制組:資源控制組 ( 常縮寫為 CGroups ) 是 Linux 核心在 2.6 版本後逐漸引入的一項對計算機資源控制的模組。與以隔離程序、網路、檔案系統等虛擬資源為目的 Namespace 不同,CGroups 主要做的是硬體資源的隔離。CGroups 除了資源的隔離,還有資源分配這個關鍵性的作用。通過 CGroups,我們可以指定任意一個隔離環境對任意資源的佔用值或佔用率。

聯合檔案系統:是一種能夠同時掛載不同實際檔案或資料夾到同一目錄,形成一種聯合檔案結構的檔案系統。Docker 將其引入到容器實現中,用它解決虛擬環境對檔案系統佔用過量,實現虛擬環境快速啟停等問題。

Docker理念

Docker 推崇一種輕量級容器的結構,即一個應用一個容器。容器技術既剔除了 Hypervisor 層,又幹掉了虛擬作業系統的概念,讓容器中應用執行的消耗與真實作業系統中執行的消耗幾乎完全一致。其次,基於聯合檔案系統的底層檔案系統支援,讓容器能夠很容易在真實作業系統中共享儲存資源,並由此帶來了對儲存空間的低消耗。

用 Docker 做什麼

  • 更快、更一致的執行環境。使用 Docker 後,開發者能夠在本地容器中得到一套標準的應用或服務的執行環境,由此可以簡化開發的生命週期 。
  • 跨平臺部署。Docker 的容器能夠很輕鬆的執行在本地伺服器,虛擬機器、雲伺服器,甚至是混合環境中。
  • 動態伸縮。Docker 的輕量性和高可移植效能夠很好的完成應用的動態伸縮。
  • 更高的效率和利用率。Docker 的高效和輕量等特徵,為替代基於 Hypervisor 的虛擬機器提供了一個經濟、高效、可行的方案。同時,低的資源消耗 非常適合在高密度的中小型部署場景中使用。