雲集技術學社|容器技術和Docker介紹

語言: CN / TW / HK

1月20日,深信服大雲售前專家YJ在信服雲《雲集技術學社》系列直播課上進行了《容器技術和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朋友可以關注“深信服科技”公眾號回顧往期,瞭解更多雲計算知識。

雷峰網 (公眾號:雷峰網)

雷峰網版權文章,未經授權禁止轉載。詳情見 轉載須知

「其他文章」