(點選上方公眾號,可快速關註)
來源:waylau,
waylau.com/ahout-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(微服務)》。
http://www.importnew.com/24651.html
為啥要用 Docker
-
開發更加敏捷:Docker 讓開發人員可以自由定義環境,建立和部署的應用程式更快、更容易,IT 運維人員快速應對變化也更加靈活性。
-
更加可控:Docker 使得開發人員儲存從基礎設施到應用的程式碼,幫助 IT 運維人管理擁有標準的、安全的、可擴充套件的操作環境。
-
高可移植性:Docker 允許自由選擇,可以是從膝上型電腦到一個團隊,從私人基礎設施到公共雲提供商。
這樣,你可以專註於開發應用,其他的繁瑣事交給 Docker 去做吧。
如何使用 Docker
真是一個大話題,本文暫時不會詳細涉及,會另外撰文介紹。如果對 Docker 抱有興趣,可以參閱市面上的書籍:
-
《The Docker Book》(James Turnbull)
-
《Docker : Up and Running 》(Karl Matthias、Sean P. Kane)
-
《Docker in Action》(Jeff Nickoloff)
-
《Using docker》(Adrian Mouat )
《給程式員的開源、免費圖書集合》收錄了幾本 Docker 免費的書籍有:
-
《Docker —— 從入門到實踐》
-
《Docker Cheat Sheet》
-
《Docker 入門實戰》
-
《Docker 中文指南》
參考
-
http://www.docker.com/what-docker
-
https://www.howtoforge.com/tutorial/how-to-use-docker-introduction/
-
http://waylau.com/ahout-microservices
-
給程式員的開源、免費圖書集合
看完本文有收穫?請轉發分享給更多人
關註「ImportNew」,看技術乾貨