容器化-Docker介紹

導讀:本文章對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容器虛擬化與傳統虛擬化對比
clipboard.png
5、Docker原理
clipboard.png
  Docker是容器引擎,把linux的cgroup、namespace等容器底層技術進行封裝抽象,爲用戶提供了建立和管理容器的便捷界面(命令行和API)
6、Docker特色
  一次構建,能夠運行在任何地方;很好的釋全了跨平臺和強一致性
7、Docker三組件
  鏡像:鏡像能夠用來建立Docker容器的。一個鏡像能夠包含一個完整的操做系統環境和用戶須要的其它應用程序,docker的鏡像是隻可讀的,一個鏡像能夠建立多個容器。
  容器:容器是鏡像建立的實例。它能夠被啓動、開始、中止、刪除。每一個容器都是相互隔離的、保證安全的平臺。
  倉庫:倉庫是集中存放鏡像文件的場所。每一個倉庫中又包含了多個鏡像,每一個鏡像有不一樣的標籤(tag)。
8、Docker帶來的影響linux

  • 優化資源使用: 之前咱們一臺32C128G物理機最多虛擬20臺左右的4C4G虛機,每臺虛擬機啓動一個程序,一共部署20多個程序,機器平均利用率不超過20%,致使大量資源浪費;如今經過docker容器方式啓動應用,因爲容器共享操做系統網絡,內存、cpu,咱們一臺物理機機器平都可以啓動60個左右的容器,至關於跑60個左右的應用,經生產驗證,應用的性能並無實際損耗。容器停掉後,資源自動釋放;避免資源按期回收 運維效率提高 之前咱們對每一個應用部署流程:申請資源——》建立虛機——》初始化運行環境——》部署應用程序包——》啓動應用,整個流程須要5-7天;若是須要擴展實例時,須要一樣的操做流程。容器化帶來的變革:編寫Dockerfile——》構建鏡像——》拉去鏡像並運行;Dockerfile中包含運行環境,只須要編寫一次;容器運行在資源池中(提早預製好的),整個流程須要幾分鐘完成 環境一致性 傳統方式中每一步可能會出現問題(人工或程序);容器化後構建的鏡像始終如一,任何地方運行都不受影響 交付流程的改變 開發——》編譯成war/jar——》提交運維部署申請——》運維按期處理——》通知業務上線成功——》業務驗證——》發現問題——》通知運維回退;整個過程耗時較長,涉及開發、運維強耦合,任何一步失誤致使服務不可用。?容器化變革:開發——》源代碼/war/jar——》一鍵部署——》業務驗證——》發現問題——》一鍵回滾;整個過程幾分鐘內完成,開發者、項目經理、產品經理等均可以獨立完成 加速微服務落地 微服務化後,隨着業務的增長、服務的拆分,服務的個數回暴增,之前可能幾十個服務,如今變成了幾百個服務甚至更多;服務的迭代上線、監控對傳統的運維挑戰更大,須要投入更多的人力物力去支持;容器化後,每一個微服務就是一個容器,容器擴縮能夠在秒級內實現,容器的監控有專門的監控工具,業務運行環境在容器中已經初始化好了,目前的運維團隊能夠更方便的去管理更多的服務。 以應用爲中心 傳統的應用部署須要先申請機器,考慮物理資源;容器化後,全部容器跑在一個資源池中,只需一次行初始化資源池,後面能夠方便使用;業務開發者更聚焦在應用開發層面 加速混合雲或多雲數據中心建設 應用程序最終經過Dockerfile生成鏡像,鏡像存儲在鏡像倉庫,因爲docker的特性(一次構建、隨處運行),在雲端或其它數據中心只要安裝簡單的環境就能夠拉去鏡像鏡像運行。
相關文章
相關標籤/搜索