容器技術和Docker介紹

雲集技術學社發表於2022-01-21

1月20日,業內專家在信服雲《雲集技術學社》系列直播課上進行了《容器技術和Docker介紹》的分享,詳細介紹了容器技術的發展、以Docker為代表的容器技術生態以及容器技術的應用場景。以下是他分享內容摘要。


看點一: 容器和Docker發展歷史

容器技術發展是從 上世紀70年代開始,在算力飛速發展的背景下,科學家圍繞著如何提高資源利用率進行研究,因此產生了最早的資源隔離技術,如chroot。資源隔離技術持續發展到21世紀初期,Namespace、Cgroup等資源隔離技術加入Linux核心,形成了核心標準的LXC容器技術。


2010年前後,雲端計算逐步發展,共享經濟和網際網路的趨勢越來越明顯,要求企業對客戶的需求能夠精準把控和快速滿足,因此出現了敏捷迭代。在敏捷迭代的場景下,如果每次都需要工程師重複地去規劃底層資源的隔離,配額,環境配置等,整體流程就無法實現敏捷。


基於這些背景,一個叫做Solomon Hykes的工程師提出了現代化容器的解決方案,他把這些技術整合到一個開箱即用的軟體中,並且加入了諸多如使用者友好的管理介面、規模化管理、儲存格式等功能,這些能力如今都成為了容器的標準能力。


2014到2017年,Google等頭部廠商先後開源圍繞容器生態的解決方案,並試圖掌握技術主導權,由此分化出CNCF和OCI等不同的技術組織和標準。


2018年後,CNCF主導的容器生態獲得巨大成功,驅動了容器技術為基礎的新一代PaaS的發展,孵化出瞭如應用開發運維能力(DevOps),應用架構(微服務),無伺服器架構等領域的新方案。


以上就是容器技術大概的發展歷史。 提起容器技術大家會聯想到Docker,其實容器技術並不特指Docker,但Docker在整個容器技術領域有著非常重要的作用, 主要表現在三個方面

一是Docker是容器技術的開創者,Docker在LXC的基礎上降低了容器技術使用的複雜度,提出了大規模使用的管理運維方案。開創性提出了映象檔案實現了應用和執行環境的“一次封裝到處執行”,進而又推動技術的普及度。


二是Docker是容器技術的推廣者,DockerHub映象倉庫構建了基於映象的開發者社群和生態,讓全球開發者都參與到生態建設和分享中來,為容器技術的普及做出了極大貢獻,Docker也憑此獲得高速發展和領導者地位。


三是Docker是標準的推動者,Docker貢獻和領導了容器映象和執行時的OCI標準制定,加速了容器技術的發展。同時還貢獻了containerd,參與了CRI標準制定,推動了容器生態和組織的發展,最終達到工業級應用。


儘管近些年Docker在容器技術主導權的地位爭奪中發展不太樂觀,但Docker經過十年經營,在市場認知度、學習資源的完善度、客戶應用的成熟度等方面仍具有巨大優勢,是瞭解容器發展歷史和技術的首推學習物件。


看點二: Docker為代表的容器技術介紹

當談論Docker的時候,並不是談論單獨的產品,而是 Docker公司針對容器技術、管理和生態的一整套解決方案

Docker由RunC、Containerd、Docker Engine、Docker Compose、Docker Swarm等部分組成: 


RunC(low-level)是一個輕量級的工具,用來執行容器,也是標準化的產物,是在圍繞容器格式和對執行時制定的一個開放的工業化標準。


Containerd(high-level)是容器虛擬化技術,從Docker中剝離出來,形成開放容器介面(OCI)標準的一部分,起到承上啟下的作用,對上接受命令引數的內容,對下呼叫RunC實際的操作容器服務。


Docker Engine是執行Docker標準的後臺應用程式(Dockerd),用來構建映象,執行容器,管理網路和儲存等。它的API不遵循CRI標準。任何第三方平臺與其整合必須開發對接其介面(Docker-shim)。


Docker Compose是基於YAML規範使用指令碼來定義和簡化多容器部署的工具。Docker Swarm是Docker叢集管理平臺。


Docker的核心概念是映象,映象含有啟動Docker容器所需的檔案系統結構及內容。可以說,映象是Docker設計精巧的、引爆容器技術的核彈。


映象有五個特性:一是封裝,Docker映象將應用及其類庫,配置、環境等依賴全部打包緊耦合到一個檔案實現應用遷移,讓應用到任意環境都可開箱並立即正常執行。


二是分層,Docker映象由基礎層(base image)和應用層構成,而應用層可以根據對底層的依賴程度,抽象出不同的基礎層。


三是共享,基於分層檔案系統,不同的層可以被共享和依賴,使得映象透過標準API操作進行復制時,只需要獲取資料不同的層即可,不需要所有依賴都被複制(底層依賴已經存在情況下,會透過層的UUID進行校驗)。


四是輕量,多個容器透過同一個映象建立時,不需要對映象進行復制(對比虛擬機器),只需要將映象層掛載為只讀,然後再加上一個可讀寫層即可。


五是寫時複製,只有在可讀寫層的資料變化且需要儲存寫入新的層的時候,Docker映象才會生成新的映象層。寫時複製與分層機制可以大大減少磁碟空間的佔用和容器啟動時間。

Docker基於映象去建立容器的具體步驟是:首先將BaseImage內容作為容器的rootfs以只讀方式掛載。然後Docker Daemon繼續解析映象的其它層,如ADD,ENV等資訊,對容器的執行時環境進行初始化。初始化後Docker Daemon繼續解析映象檔案,執行CMD資訊中的命令並執行,使得容器進入執行態。


Docker在計算時會用到Namespace和Cgroup技術,Docker會基於Namespace技術進行包括網路、檔案系統和環境等在內的資源隔離。Linux Cgroup就是Linux核心中用來為程式設定資源限制的一個重要功能,全稱是Linux Control Group,主要作用是限制一個程式能夠使用的資源上限,包括CPU、記憶體、磁碟、網路頻寬等等。 


映象倉庫是用來儲存和分發容器映象的應用。企業和個人對產出的映象檔案可以集中管理,便於進行許可權控制、安全控制、能力共享、生態建設等。映象倉庫可以對基於容器映象的應用進行統一的版本,分發管理等。映象倉庫可以簡化和最佳化企業基於容器的開發測試管理和整合,運維流程等(如CICD)。


看點三: 容器其他重要概念與應用場景

除了容器技術生態外,容器還有著其他的重要概念。Docker和虛擬機器都是資源隔離的方案。Docker是基於OS的資源隔離技術,Docker Engine佔用資源很少,物理機資源基本上被容器應用和物理機作業系統使用。虛擬機器多了一層Guest OS(虛擬機器作業系統),若一臺物理機上跑10臺虛擬機器,則有10個Guest OS的資源損耗,Hypervisor層虛擬化,降低了虛擬機器效能。

容器安全也是現在一個比較重要的領域,目前 容器安全主要注重四個方面, 一是映象安全,如果使用了不安全的外部映象依賴,映象中有系統漏洞、缺陷,或者被惡意植入病毒和後門等,都會對容器造成較大威脅。 二是容器逃逸,由於容器是基於OS共享的架構,如果攻擊者利用容器漏洞,獲取OS root許可權,檔案系統許可權等,都會對整個系統造成極大危害。 三是配置安全,即對容器引擎,映象倉庫,Kubernetes等沒有進行正確的許可權配置等造成的入侵。 四是漏洞管理,針對映象中的類庫檔案漏洞,如apache log4j2漏洞,需要對映象檔案進行及時識別和更新。


容器技術在深入到企業級應用時,還要有巨大的知識需要掌握,比如管理排程、大規模網路的網路效能、容器日誌執行監控等,這些都需要對相應的解決方案進行深入學習。另外,由於容器技術的特性和生態發展,雲服務廠商也在普遍使用容器技術構建企業級PaaS平臺。


容器的應用場景主要有六個:一是 快速開發,由於公有映象倉庫有著龐大的開源社群和開放的映象資源,可以讓開發者實現開箱即用。二是 多雲應用,因為容器與IaaS解耦以及容器本身輕量的特性讓容器更便於去做多雲的遷移。三是 應用隔離,在同一個伺服器裡需要執行多個應用時,可以使用容器去做執行環境和依賴的隔離。四是 微服務架構,容器與微服務架構輕量、敏捷彈性的特性適配。五是 能力沉澱,利用容器技術可以將前期架構的執行環境封裝起來,方便後來的技術人員開箱即用,這也是對企業能力的沉澱。六是 持續整合和部署,容器可以保障開發測試環境的一致性,實現快速迭代和部署。


以上就是本次直播的主要內容。對雲端計算感興趣的IT朋友可以關注雲集技術學社,瞭解更多雲端計算知識。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70009737/viewspace-2853438/,如需轉載,請註明出處,否則將追究法律責任。

相關文章