簡述 Docker

簡述 Docker

Docker 是 Golang 編寫的, 自 2013 年推出以來,受到越來越多的開發者的關注。如果你關注最新的技術發展,那麼你一定聽說過 Docker。不管是雲服務還是微服務(Microservices),越來越多的廠商都開始基於 Docker 作爲基礎設施自動化的工具。那麼什麼是 Docker?Docker與傳統的虛擬機有什麼區別?爲何要採用 Docker?如何使用 Docker?

本文,就針對上述提到的問題,來簡單介紹下 Docker。

什麼是 Docker

Docker 是開源的應用容器引擎。

Docker 可以讓你將所有應用軟件以及它的以來打包成軟件開發的標準化單元。

Docker 容器將軟件以及它運行安裝所需的一切文件(代碼、運行時、系統工具、系統庫)打包到一起,這就保證了不管是在什麼樣的運行環境,總是能以相同的方式運行。就好像 Java 虛擬機一樣,“一次編寫,到處運行(Write once, run anywhere)”,而 Docker 是“一次構建,到處運行(Build once,run anywhere)”。

Docker 是一種“容器即服務”(Docker Containers as a Service ,簡稱 CaaS),使得開發和IT運營團隊可以對於應用的構建、發佈、運行更加敏捷和可控。

概況的說: Docker 是爲開發人員和系統管理員用於構建、發佈、並運行分佈式應用程序的開放式平臺。該平臺由 Docker 引擎(一個便攜、輕巧的運行時和打包工具) 和 Docker Hub (一個共享應用程序和自動化工作流的雲服務)等組成。Docker 可以使應用程序從組件迅速組裝並消除了開發、質量保證和生產環境之間的摩擦問題。這樣一來,IT部門可以更快地發佈,而這些應用程序不管是運行在筆記本電腦、數據中心的虛擬機,還是任何的雲,其運行過程和結果都是一致的。

我們再來看下 Docker 的 Logo 。很明顯,這是一隻鯨魚,它託着許多集裝箱。我們可以把宿主機可當做這隻鯨魚,把相互隔離的容器可看成集裝箱,每個集裝箱中都包含自己的應用程序。這 Logo 簡直的太形象了!

Docker 的優點

  • 輕量級:所有容器在一臺機器上共享同一個操作系統內核,這樣他們立即開始,並更有效地利用內存。Image 是從分層文件系統的構建,這樣他們能夠共享公共文件,使得磁盤使用率和 Image 的下載更加高效。
  • 開放:Docker 容器是基於開發的標準,允許容器運行在主流的 Linux 發佈版和 Microsoft 操作系統作爲所有的基礎設施。
  • 安全:容器使得應用程序彼此隔離,而基礎架構同時爲應用程序提供了額外的保護層。

Docker 與 虛擬機的區別

容器與虛擬機有着類似的資源隔離和分配的優點,但不同的架構方法使容器能夠更加便攜,高效等。

虛擬機的架構

每個虛擬機都包括應用程序、必要的二進制文件和庫以及一個完整的客戶操作系統(Guest OS),儘管它們被分離,它們共享並利用主機的硬件資源,將近需要十幾個 GB 的大小。

容器的架構

容器包括應用程序及其所有的依賴,但與其他容器共享內核。它們以獨立的用戶空間進程形式運行在主機操作系統上。他們也不依賴於任何特定的基礎設施,Docker 容器可以運行在任何計算機上,任何基礎設施和任何雲上。

Docker 的容器利用了 LXC,管理利用了 namespaces 來做權限的控制和隔離,cgroups 來進行資源的配置,並且還通過 aufs 來進一步提高文件系統的資源利用率,而這些技術都不是 Docker 獨創。

LXC

LXC 與虛擬機的不同之處在於,它是一個操作系統級別的虛擬化環境,而不是硬件虛擬化環境。他們都做同樣的事情,但 LXC 是操作系統級別的虛擬化環境,虛擬環境有它自己的進程和網絡空間,而不是創建一個完整成熟的虛擬機。因此,一個 LXC 虛擬操作系統具有最小的資源需求,並啓動只需幾秒鐘。

正如你可以在下圖中看到的,左側是 LXC 虛擬的 Ubuntu ,默認安裝使用 11 MB 大小。

Docker 與 Microservices 的關係

Microservices(微服務) 依賴於“基礎設施自動化”,而 Docker 正是“基礎設施自動化”的利器。可以說 Docker 的火爆,一定程度上也帶動了微服務架構的興起,而微服務的廣泛應用也促進了 Docker 繁榮。可以說兩者相輔相成。

有關微服務的介紹,可以異步至《簡述 Microservices(微服務)》。

爲啥要用 Docker

  • 開發更加敏捷:Docker 讓開發人員可以自由定義環境,創建和部署的應用程序更快、更容易,IT 運維人員快速應對變化也更加靈活性。
  • 更加可控:Docker 使得開發人員保存從基礎設施到應用的代碼,幫助 IT 運維人管理擁有標準的、安全的、可擴展的操作環境。
  • 高可移植性:Docker 允許自由選擇,可以是從筆記本電腦到一個團隊,從私人基礎設施到公共雲提供商。

這樣,你可以專注於開發應用,其他的繁瑣事交給 Docker 去做吧。

如何使用 Docker

真是一個大話題,本文暫時不會詳細涉及,會另外撰文介紹。如果對 Docker 抱有興趣,可以參閱市面上的書籍:

給程序員的開源、免費圖書集合》收錄了幾本 Docker 免費的書籍有:

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章