Docker大行其道—初識

Docker的前世此生php

Docker是基於Go語言實現的雲開源項目,目前歸於Apache基金會並遵循Apache 2.0協議。誕生於2013年初,前身公司爲dotCloud,docker開源後獲得受到社會普遍的關注,docker的生態圈體系也逐漸成熟,這家公司也更名爲Docker Inc,專一於Docker相關技術和產品開發。html

Docker最大的目標是:「Build, Ship and Run Any App, Anywhere!」。你只須要經過對應用組件的一次的封裝,就能在任意地點構建和運行你的應用。不管是一個完整的應用,或者是某些微服務,甚至到一個完整的操做系統都能成爲docker的應用組件。Docker提供一個高效、敏捷和輕量的容器方案,能動態適應各類規模的系統部署需求。mysql

Docker整個生命週期包含三部分:鏡像(Image),容器(Container),倉庫(Repository)。鏡像和容器的關係就像程序和進程,鏡像是容器運行的一大前提,而容器則是鏡像的一個運行實例。倉庫則是鏡像的管理中心,默認的鏡像倉庫爲Docker Hub。linux

docker-frame

Docker運行容器前須要檢查本地是否存在對應的鏡像,若是不存在,會嘗試從默認的鏡像倉庫下載。鏡像實例化以後運行着一個完整的容器,容器除了鏡像自己的內容外,還提供額外的可寫文件層以及相對獨立的運行環境(多是一些應用或者服務,也多是完整的操做系統)。git

做爲一個C/S模型的項目,Docker經過Docker Host進行鏡像、容器、守護進程、分區等的管理,同時在Docker Client進行鏡像的拉取,容器的構建等操做,一般狀況下Host和Client可能會在同一臺機器上。github

Docker開源代碼地址:https://github.com/docker/dockersql

Docker得天獨厚的優點docker

新的部署方式數據庫

假如當前有這麼一個場景:「因爲業務增加,公司的一個網站項目須要遷移到新的服務器」。按照傳統方案,咱們極可能須要做一些重複性的工做。首先須要在新的服務器上安裝對應的運行環境以及對應的依賴,如LAMP(Linux+Apache+Mysql+PHP),建立對應的用戶或組並進行文件權限的管理,耗費大量的精力後,還須要對該環境進行測試,最後才能部署上線。試想一下,若是這樣的需求多少十幾倍,這些工做須要重複的執行。服務器

也許你會說能夠經過虛擬化的技術將整個環境打包成鏡像再進行部署,加入新的服務器自己也是一臺虛擬化的機器,再加上一層xen(或者其餘虛擬機)去部署顯然顯得多餘了。

而Docker提供一種極爲簡便的操做方式,經過容器來進行應用打包,咱們能夠經過封裝成鏡像或是編寫Dockerfile等方式來進行打包,這意味着在新的服務器上只須要啓動所須要的容器便可。一來節省了大量的時間投入,而來下降了部署過程出現問題帶來的隱患。

運維策略的革新

1. 極速交付和部署

使用docker,開發人員可使用鏡像快速構建一套標準的開發環境。以後的測試和上線環節徹底能夠複用這套鏡像將應用部署到測試環境或生產環境等任意地方。Docker能夠快速建立、刪除容器,並保留了每個步驟的配置和操做過程,下降開發、測試、部署的時間的同時讓環境部署更容易被理解。經過簡單的配置文件修改,就能輕鬆完成一次運行環境的迭代,全部操做均可以以增量的形式進行分發和更新,從而實現自動化和高效的容器管理。

2. 性能損耗低

事實上docker是內核級別的虛擬化,不須要額外的虛擬化管理程序,所以開啓docker對性能的損耗幾乎忽略不計。

3. 輕便易遷移拓展

Docker幾乎支持任意平臺運行,不管是物理機仍是虛擬化的主機,甚至我的電腦都能兼容運行docker,這種兼容性可讓應用更方便切換運行平臺。

4. 規範化的標準

Docker背後的標準化容器執行引擎 - runC。runC是由docker貢獻後續完善的一個開放的工業化標準,其主要內容:

  • 操做標準化:容器的標準化操做包括使用標準容器感受建立、啓動、中止容器,使用標準文件系統工具複製和建立容器快照,使用標準化網絡工具進行下載和上傳。
  • 內容無關:內容無關指無論針對的具體容器內容是什麼,容器標準操做執行後都能產生一樣的效果。如容器能夠用一樣的方式上傳、啓動,不論是php應用仍是mysql數據庫服務。
  • 基礎設施無關:不管是我的的筆記本電腦仍是AWS S3,亦或是Openstack,或者其餘基礎設施,都應該對支持容器的各項操做。
  • 爲自動化量身定製:制定容器統一標準,是的操做內容無關化、平臺無關化的根本目的之一,就是爲了可使容器操做全平臺自動化。
  • 工業級交付:制定容器標準一大目標,就是使軟件分發能夠達到工業級交付成爲現實。

5. 集羣管理

Kubernetes是Google開源的Docker容器集羣管理系統,爲容器化的應用提供資源調度、部署運行、服務發現、擴容縮容等整一套功能,本質上可看做是基於容器技術的mini-PaaS平臺。

Kubernetes

關於Docker和虛擬機的比較,請參考:http://www.linuxprobe.com/docker-and-vm.html

關於Docker的標準,請參考:http://www.open-open.com/lib/view/open1444481959869.html

文章小節

全文主要對docker進行概念性的介紹,想必讀到這裏,docker不再會是一個陌生的技術。不管是在針對應用的自動化運維仍是PAAS的管理策略,docker都能提供一套優秀的解決方案,docker在領域內倍受青睞,讓運維的工做有了史無前例的優質體驗。若是你也被docker的魅力深深折服的話,歡迎加入到docker的學習行列一同探索。

免費提供最新Linux技術教程書籍,爲開源技術愛好者努力作得更多更好:http://www.linuxprobe.com/

相關文章
相關標籤/搜索