雲集技術學社|容器技術和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朋友可以關注“深信服科技”公眾號回顧往期,瞭解更多雲計算知識。

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

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

「其他文章」