docker 是 golang 編寫的, 自 2013 年推出以來,受到越來越多的開發者的關注。如果你關注最新的技術發展,那麼你一定聽說過 docker。不管是雲服務還是微服務(microservices),越來越多的廠商都開始基于 docker 作為基礎設施自動化的工具。那麼什麼是 docker?docker與傳統的虛拟機有什麼差別?為何要采用 docker?如何使用 docker?
本文,就針對上述提到的問題,來簡單介紹下 docker。
docker 可以讓你将所有應用軟體以及它的以來打包成軟體開發的标準化單元。

docker 是一種“容器即服務”(docker containers as a service ,簡稱 caas),使得開發和it營運團隊可以對于應用的建構、釋出、運作更加靈活和可控。
概況的說: docker 是為開發人員和系統管理者用于建構、釋出、并運作分布式應用程式的開放式平台。該平台由 docker 引擎(一個便攜、輕巧的運作時和打包工具) 和 docker hub (一個共享應用程式和自動化工作流的雲服務)等組成。docker 可以使應用程式從元件迅速組裝并消除了開發、品質保證和生産環境之間的摩擦問題。這樣一來,it部門可以更快地釋出,而這些應用程式不管是運作在筆記本電腦、資料中心的虛拟機,還是任何的雲,其運作過程和結果都是一緻的。
我們再來看下 docker 的 logo 。很明顯,這是一隻鲸魚,它托着許多集裝箱。我們可以把主控端可當做這隻鲸魚,把互相隔離的容器可看成集裝箱,每個集裝箱中都包含自己的應用程式。這 logo 簡直的太形象了!
輕量級:所有容器在一台機器上共享同一個作業系統核心,這樣他們立即開始,并更有效地利用記憶體。image 是從分層檔案系統的建構,這樣他們能夠共享公共檔案,使得磁盤使用率和 image 的下載下傳更加高效。
開放:docker 容器是基于開發的标準,允許容器運作在主流的 linux 釋出版和 microsoft 作業系統作為所有的基礎設施。
安全:容器使得應用程式彼此隔離,而基礎架構同時為應用程式提供了額外的保護層。
容器與虛拟機有着類似的資源隔離和配置設定的優點,但不同的架構方法使容器能夠更加便攜,高效等。
每個虛拟機都包括應用程式、必要的二進制檔案和庫以及一個完整的客戶作業系統(guest os),盡管它們被分離,它們共享并利用主機的硬體資源,将近需要十幾個 gb 的大小。
容器包括應用程式及其所有的依賴,但與其他容器共享核心。它們以獨立的使用者空間程序形式運作在主機作業系統上。他們也不依賴于任何特定的基礎設施,docker 容器可以運作在任何計算機上,任何基礎設施和任何雲上。
lxc 與虛拟機的不同之處在于,它是一個作業系統級别的虛拟化環境,而不是硬體虛拟化環境。他們都做同樣的事情,但 lxc 是作業系統級别的虛拟化環境,虛拟環境有它自己的程序和網絡空間,而不是建立一個完整成熟的虛拟機。是以,一個 lxc 虛拟作業系統具有最小的資源需求,并啟動隻需幾秒鐘。
正如你可以在下圖中看到的,左側是 lxc 虛拟的 ubuntu ,預設安裝使用 11 mb 大小。
microservices(微服務) 依賴于“基礎設施自動化”,而 docker 正是“基礎設施自動化”的利器。可以說 docker 的火爆,一定程度上也帶動了微服務架構的興起,而微服務的廣泛應用也促進了 docker 繁榮。可以說兩者相輔相成。
開發更加靈活:docker 讓開發人員可以自由定義環境,建立和部署的應用程式更快、更容易,it 運維人員快速應對變化也更加靈活性。
更加可控:docker 使得開發人員儲存從基礎設施到應用的代碼,幫助 it 運維人管理擁有标準的、安全的、可擴充的操作環境。
高可移植性:docker 允許自由選擇,可以是從筆記本電腦到一個團隊,從私人基礎設施到公共雲提供商。
這樣,你可以專注于開發應用,其他的繁瑣事交給 docker 去做吧。
真是一個大話題,本文暫時不會詳細涉及,會另外撰文介紹。如果對 docker 抱有興趣,可以參閱市面上的書籍:
<a href="http://www.docker.com/what-docker">http://www.docker.com/what-docker</a>
<a href="https://www.howtoforge.com/tutorial/how-to-use-docker-introduction/">https://www.howtoforge.com/tutorial/how-to-use-docker-introduction/</a>
<a href="http://waylau.com/ahout-microservices">http://waylau.com/ahout-microservices</a>
<a href="https://github.com/waylau/books-collection">給程式員的開源、免費圖書集合</a>