Docker是啥?容器变革的火花?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
戳藍字“CSDN云計算”關注我們哦!
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 編譯作者:風車云馬(微信號:zhangyisq)文︱Serdar Yegulalp本篇文章轉自InfoWorld網站在暢聊Docker之前,我們先講講什么是容器?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ?? ?
現代軟件開發的目標之一是應用程序既能運行在同一主機或集群上,又能彼此隔離,這樣它們就不會過度干擾彼此的操作或維護,但由于要運行包、庫和其他軟件組件,這樣就會變得會比較困難。
?
解決這個問題的方案之一是用虛擬機,它將相同硬件上的應用程序完全隔離,并將軟件組件之間的沖突和硬件資源之間的競爭降到最低,但是虛擬機體積比較龐大,每個虛擬機都需要自己的操作系統,所以通常是GB大小而且很難維護和升級。
?
與虛擬機相反,容器將應用程序的執行環境彼此隔離,但共享底層OS內核。它們通常以兆字節為單位,使用的資源比虛擬機少得多,而且幾乎是立即啟動的。可以做到在相同的硬件上更密集地打包,而不需要花費太多的精力和開銷。
?
容器提供了一種高效和高粒度的機制,將軟件組件組合到現代企業所需的各種應用程序和服務堆棧中,并保持這些軟件組件的更新和維護。?
圖片來源網絡
?
Docker技術到底是啥?
Docker是一個開源項目,可以輕松創建容器和基于容器的應用程序,最初是為Linux構建的,現在也可以在Windows和MacOS上運行。
?
一直以來Docker都可以幫助開發人員快速構建輕量級和可移植的軟件容器,從而簡化應用程序開發、測試和部署等諸多環節。具體來說,它是一個用于構建應用程序的軟件平臺,可以提供一種小型和輕量級的執行環境用來共享操作系統內核,但在其他方面是獨立運行的。
?
雖然容器概念已經出現不短的時間,但2013年推出的開源項目Docker在很大程度上幫助推廣了這項技術,并推動了軟件開發中容器化和微服務的趨勢,這種趨勢后來被稱為云原生開發。
?
要理解Docker的工作原理,讓我們看一下用于創建Docker容器化應用程序的一些組件。?
圖片來源網絡
Dockerfile文件:每個Docker容器都從一個Dockerfile開始。Dockerfile是用易于理解的語法編寫的文本文件,其中包含構建Docker鏡像的指令,指定了容器的操作系統、編程語言、環境變量、文件位置、網絡端口和其他組件,當然還指定了容器在運行后要做什么。
?
Docker鏡像:編寫好Dockerfile之后,就可以調用Docker構建工具build來創建一個Dockerfile鏡像。
?
Dockerfile是一組說明如何生成鏡像的指令,而Docker鏡像是一個可移植文件,包含容器將運行哪些軟件組件以及如何運行的規范,因為Dockerfile可能包含關于從在線資源庫獲取某些軟件包的說明,所以需要注意指定正確的版本,否則Dockerfile可能會根據調用的時間不同生成不一致的鏡像。但是一旦創建了一個鏡像,它就是靜態的。
?
Docker啟動:Docker的實用程序run是啟動容器的命令,每個容器都是一個鏡像的實例。容器設計為瞬態和臨時的,但是它們可以停止和重新啟動。此外可以同時運行同一鏡像的多個容器實例(每個容器具有唯一的名稱)。
?
Docker Hub庫:雖然構建容器很容易,但也不要以為需要從頭構建每個鏡像。Docker Hub是一個用于共享和管理容器的SaaS存儲庫,可以從中找到來自開源項目和軟件供應商的官方Docker鏡像,甚至普通公眾的非官方鏡像。甚至可以下載包含有用代碼的容器鏡像,或者上傳自己的鏡像共享它們,也可以將它們設置為私有,如果愿意還可以創建一個本地Docker注冊表。
?
Docker 引擎:Docker引擎是Docker的核心,Docker創建和運行容器采用的是底層CS(客戶端-服務器)技術。一般來說,當某人泛泛地說Docker,而不是指公司或整個項目時,他們指的是Docker引擎。Docker引擎有兩個不同的版本:Docker Engine Enterprise和Docker Engine Community。
?
Docker在2017年發布了企業版Enterprise Edition,兼容最初的版本,仍然是免費開源的。除此之外,Enterprise Edition增加了高級管理功能,包括集群控制和鏡像管理,以及漏洞監控,每個節點每年的成本為1500美元。
?
Docker組件、Docker集群和Kubernetes:Docker還使容器之間的協調變得更容易,通過將容器打包來構建應用程序堆棧。Docker組件簡化了開發和測試多容器應用程序的過程。它是一個命令行工具,類似于Docker客戶端,它接收一個特殊格式的描述符文件,用于從多個容器組裝應用程序,并在單個主機上協同運行它們。
?
這些更高級的版本由其他產品提供,比如Docker Swarm和Kubernetes。但是Docker提供了基礎。Swarm是從Docker項目中發展起來的,Kubernetes實際上已經成為Docker編配平臺的首選。
Docker優勢可圈可點
Docker容器提供了一種構建企業應用程序和業務流程應用程序的方法,這些應用程序比傳統應用程序更容易安裝、維護和移動。
?
Docker容器支持隔離:Docker容器使應用程序不僅彼此隔離,而且與底層系統隔離。這不僅使軟件棧更干凈,而且更容易使容器化應用程序使用系統資源,例如CPU、GPU、內存、I/O、網絡等,它還可以確保數據和代碼保持獨立。
?
Docker容器支持可移植性:Docker容器在支持容器運行環境的任何機器上運行。應用程序不必綁定到主機操作系統,因此可以保持應用程序環境和底層操作環境的整潔和最小化。
?
例如,采用容器的MySQL將在大多數支持容器的Linux系統上運行,應用程序的所有依賴項通常都在同一個容器中提供。基于容器的應用程序可以輕易從on-prem系統遷移到云環境中,或從開發人員的筆記本電腦移到服務器上,只要目標系統支持Docker以及可能與之一起使用的任何第三方工具,比如Kubernetes。
?
通常,Docker容器鏡像必須為特定的平臺構建。例如Windows容器不能在Linux上運行,反之亦然;以前,繞過此限制的一種方法是啟動運行所需操作系統實例的虛擬機,并在虛擬機中運行容器。
?
然而Docker團隊后來設計了一個更優雅的解決方案,稱為manifest,它允許多個操作系統的鏡像并行打包。盡管manifest雖然還處于試驗階段,但這暗示了容器可能成為跨平臺應用程序解決方案和跨環境應用程序解決方案。
?
Docker容器支持可組合性:大多數業務應用程序由幾個獨立的組件組成,web服務器、數據庫和cache緩存。Docker容器可以將這些部件組合成一個容易更換的功能單元。每個部分由不同的容器提供,可以獨立于其他容器進行維護、更新、交換和修改。?
這本質上是應用程序設計的微服務模型。通過將應用程序功能劃分為獨立的、自包含的服務,微服務模型為過程緩慢的傳統開發和單一僵化的應用程序提供了一種解決方案,輕量級和便攜式容器使構建和維護基于微服務的應用程序變得更加容易。
?
Docker容器簡化了編排和擴展:由于容器是輕量級的,并且開銷很小,所以可以在給定的系統上啟動更多的容器,而且容器也可以用于跨系統集群擴展應用程序,并將服務向上或向下擴展以滿足高峰需求或節約資源。
?
用于部署、管理和擴展容器的大多數企業級工具版本都是通過第三方項目提供的。其中最主要的是谷歌的Kubernetes,這是一個支持容器部署和擴展的自動化系統,還支持容器連接、負載平衡和管理。Kubernetes還提供了創建和重用多容器應用程序或“Helm charts”圖表的方法,這樣就可以根據需要構建和管理復雜的應用程序堆棧。
?
Docker還內置了Swarm編排模式,目前該模式應用比較少,Kubernetes已成為某種默認選擇。事實上Kubernetes與Docker Enterprise Edition捆綁在一起。
Docker是如何征服容器世界的?
幾十年來,Unix操作系統(如BSD和Solaris)一直存在這樣一種思想,即給定的進程可以在一定程度上獨立于其操作環境運行。最初的Linux容器技術LXC是一種os級別的虛擬化方法,用于在一臺主機上運行多個隔離的Linux系統。LXC是通過兩個Linux特性實現的:命名空間(namespaces)和cgroups控制組(controlgroups),命名空間封裝了一組系統資源,使其看起來像是專門用于該進程的;cgroups控制組用于管理一組進程的系統資源(如CPU和內存)的隔離和使用。
?
容器將應用程序與操作系統解耦,這意味著用戶可以擁有一個干凈且最小的Linux操作系統,并在一個或多個隔離的容器中運行其他所有東西。由于操作系統是從容器中抽象出來的,所以您可以將容器移動到支持容器運行環境的任何Linux服務器上。
?
Docker在LXC基礎上進行了幾項重大更改,使容器更加便捷和靈活。使用Docker容器,比使用虛擬機更快、更容易地部署、復制、移動和備份工作負載。Docker為任何能夠運行容器的基礎架構帶來了云一樣的靈活性。Docker的容器鏡像工具也是LXC的一個改進,它允許開發人員構建鏡像庫,從多個鏡像組合應用程序,并在本地或遠程基礎架構上啟動這些容器和應用程序。
?
Docker表現并不萬能
?
容器可以解決很多問題,但也不是萬能藥,有一些缺點是由設計本身造成的。
?
Docker容器不是虛擬機。人們對容器最常見的錯誤是將它們等同于虛擬機。然而,由于容器和虛擬機使用不同的隔離機制,它們有明顯不同的優點和缺點。
?
虛擬機為進程提供了高度的隔離,因為它們在自己的操作系統實例中運行。該操作系統也不必與主機上運行的操作系統相同。Windows虛擬機可以在Linux管理程序上運行,反之亦然。
?
相反,容器使用主機操作系統資源的受控部分;許多應用程序以高度管理的方式共享相同的OS內核。因此,容器化應用程序不像虛擬機那樣完全隔離,但是它們為絕大多數工作負載提供了足夠的隔離。
?
Docker容器無法提供裸機速度。容器幾乎沒有虛擬機的開銷,但是它們的性能影響仍然是存在的。如果您的工作負載需要裸機速度,那么容器可能足夠接近—比vm更接近—但是您仍然會看到一些開銷。
?
Docker容器是無狀態和不可變的。容器從描述其內容的鏡像啟動和運行。默認情況下,該鏡像是不可變的——一旦創建,它就不會更改。
?
因此,容器沒有持久性。如果啟動一個容器實例,然后將其終止并重新啟動它,那么新的容器實例將不會具有與舊容器實例關聯的任何有狀態信息。
?
這是容器區別于虛擬機的另一個方式。默認情況下,虛擬機具有跨會話的持久性,因為它有自己的文件系統。對于容器來說,改變這種情況的唯一方法是創建一個新的、修改過的容器鏡像。
?
從積極的方面看,容器的無狀態性使容器的內容更加一致,它還迫使開發人員將應用程序數據與應用程序代碼分開。如果希望容器具有任何持久性狀態,則需要將該狀態放置到其他位置。可以是數據庫,也可以是在引導時連接到容器的獨立數據卷。
?
Docker容器不是微服務。在前面提到過容器如何幫助創建微服務應用程序。這并不意味著將給定的應用程序粘貼到容器中就會自動創建一個微服務。無論微服務是否部署在容器中,都必須根據微服務設計模式構建微服務應用程序。
?
當虛擬機出現時,它們使應用程序與所運行的系統解耦成為可能。Docker容器進一步實現了這一想法,它不僅比虛擬機更輕量級、更便攜、運行速度更快,而且還提供了虛擬機無法提供的擴展、組合和管理特性。
如何少走彎路,利用不同區塊鏈的數據結構實現項目上鏈?
?
數據架構是區塊鏈的重要組成部分,了解數據架構,可以讓我們對于自身業務是否適合上鏈做出明智的判斷。
?
9月19日,【dfuse小聚:區塊鏈數據應用討論會】將在上海舉行,dfuse CTO&聯合創始人、EOS加拿大聯合創始人 Alex Bourget;慢霧科技合伙人兼安全產品負責人啟富(Keywolf);MYKET聯合創始人/EOS Cannon聯合創始人Ricky胖哥,與你一起深度探索區塊鏈應用搭建以及區塊鏈數據結構的奧秘,讓你明白到底你的業務該如何上鏈!
?
長按下方二維碼報名
???福利
掃描添加小編微信,備注“姓名+公司職位”,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!
推薦閱讀:
5大必知的圖算法,附Python代碼實現
適合小團隊作戰,獎金+招聘綠色通道,這一屆算法大賽關注下?
頂配 12699 元、沒有 5G,“浴霸三攝”的 iPhone 到底長什么樣?
備受期待的原子交換,將如何對中心化交易所構成威脅?
谷歌NIPS論文Transformer模型解讀:只要Attention就夠了
馬云淡出「理想國」
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
總結
以上是生活随笔為你收集整理的Docker是啥?容器变革的火花?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pm2.5和pm10的标准是如何?
- 下一篇: Boost:标记的的bimap双图测试程