導讀:本文章對Docker技術進行了介紹,闡述了Docker的技術發展歷程、容器與虛擬機的差別、Docker原理、特色、Docker三組件和Docker帶來的影響,爲咱們進一步理解Docker打下基礎。
1、前言
2014年春天,我進入一家電商公司作反應式編程研究和落地工做,由於作的是平臺工做,但願經過平臺去知足不通的業務場景,業務部門只須要進行簡單的適配和封裝就能進行產品創新。此時就須要一種工具去快速搭建基礎環境,環境之間不能相互干擾,業務部門還能方面使用。就這樣和Docker進行了第一次偶遇,基於它咱們將基礎環境、公共組件等封裝到鏡像中,業務部門只須要將代碼放入Docker中就能夠輕鬆使用,原來須要1-2周的環境準備,如今只須要幾分鐘,太神奇了!
2、什麼是docker?
Docker 是PaaS 提供商 dotCloud, 基於容器技術的輕量級虛擬化解決方案,誕生於2013年初,基於Google公司推出的Go 語言實現,加入了 Linux 基金會,聽從Apache 2.0 協議,原始碼在GitHub上進行維護;2017年Docker進行商業化運做,原來在github上開源項目正式更名爲moby,docker變成了一家商業化公司。說到Docker,咱們就不得不說容器技術了,Docker是一種容器化技術的落地。容器做爲一類操做系統層面的虛擬化技術,其目標是在單一Linux主機交付多套隔離性環境,容器共享同一套主機操做系統內核。
3、Docker技術發展歷程
2011年 — Warden:由CloudFoundry公司於2011年所創建,其利用LXC 做爲初始階段,隨後又將其替換爲自家實現方案。與LXC不一樣,Warden並不會與Linux緊密耦合。相反,其可以運行在任意可以提供多種隔離環境方式的操做系統之上
2013年 — LMCTFY:「Let Me Contain That For You(幫你實現容器化)」。它其實屬於谷歌容器技術堆棧的開源版本,負責提供Linux應用程序容器,Kubernetes目前所使用的cAdvisor工具最初就來源於lmctfy項目
2013年 — Docker:起步階段使用LXC,然後利用本身的libcontainer庫將其替換下來。與其它容器平臺不一樣,Docker引入了一整套與容器管理相關的生態系統。其中包括一套高效的分層式容器鏡像模型、一套全局及本地容器註冊表、一個精簡化REST API以及一套命令行界面等等。在後期發展階段,Docker公司還構建起一套名爲Docker Swarm的容器集羣管理解決方案
2014年 — Rocket:解決部分Docker當中存在的缺陷,開發目標是在安全性與生產要求知足能力上超越Docker,其基於App Container規範並使其成爲一項更爲開放的標準
2015年—Docker進行你們視線,開源社區獲得史無前例的發展
2016年 — Windows容器發佈,docker新技術架構升級
2017年—Docker:正式進行商業化運做,docker與moby分家
2018年-Docker在企業中快速落地
4、容器與虛擬機差別
容器爲應用程序提供了隔離的運行空間:每一個容器內都包含一個獨享的完整用戶環境空間,而且一個容器內的變更不會影響其餘容器的運行環境。容器技術使用了namespaces來進行空間隔離,經過文件系統的掛載點來決定容器能夠訪問哪些文件,經過cgroups來肯定每一個容器能夠利用多少資源。此外容器之間共享同一個系統內核,這樣當同一個庫被多個容器使用時,內存的使用效率會獲得提高。
對於系統虛擬化技術來講,虛擬層爲用戶提供了一個完整的虛擬機:包括內核在內的一個完整的系統鏡像。CPU虛擬化技術能夠爲每一個用戶提供一個獨享且和其餘用戶隔離的系統環境,虛擬層能夠爲每一個用戶分配虛擬化後的CPU、內存和IO設備資源
基於docker容器虛擬化與傳統虛擬化對比
5、Docker原理
Docker是容器引擎,把linux的cgroup、namespace等容器底層技術進行封裝抽象,爲用戶提供了建立和管理容器的便捷界面(命令行和API)
6、Docker特色
一次構建,能夠運行在任何地方;很好的釋全了跨平臺和強一致性
7、Docker三組件
鏡像:鏡像能夠用來建立Docker容器的。一個鏡像能夠包含一個完整的操做系統環境和用戶須要的其它應用程序,docker的鏡像是隻可讀的,一個鏡像能夠建立多個容器。
容器:容器是鏡像建立的實例。它能夠被啓動、開始、中止、刪除。每一個容器都是相互隔離的、保證安全的平臺。
倉庫:倉庫是集中存放鏡像文件的場所。每一個倉庫中又包含了多個鏡像,每一個鏡像有不一樣的標籤(tag)。
8、Docker帶來的影響linux