基于Kubernetes的容器云平臺實戰》——2.2 容器生命周期管理">《基于Kubernetes的容器云平臺實戰》——2.2 容器生命周期管理
702
2025-04-01
第1章Docker簡介
隨著互聯網及移動互聯網的快速發展,云計算技術也開始迅猛發展,云計算技術發展包括兩大方向:虛擬化及容器化。虛擬化技術是傳統的云計算技術,容器化是新一代的云計算技術。在新一輪的容器云計算技術大潮中出現了多種容器化技術,如Garden、Warden、Docker、Rocket、Kata等。經過多年的發展Docker容器技術逐漸被接受并應用于DevOps和微服務等領域,Docker可以說正在成為當今云時代的基礎“構件”,了解和掌握它的功能、架構和技術特點,對于廣大業界同仁來說是迫切的需求。下面就嘗試從它的基本功能、優缺點、基本概念和架構原理等多個方面進行初步的剖析,希望能夠給讀者帶來一定的幫助。
1.1 什么是Docker
我們通常所說的Docker實際上是指Docker引擎,它是Docker公司容器平臺產品的核心部分。它集成了來自操作系統內核的聯合文件系統、進程控制組和命名空間等技術,將它們打包成人人可用、人人用得好的容器工具。Docker的重要性在于它通過統一的鏡像格式和簡單的工具將應用軟件和基礎運行環境成功地隔離開來,為容器技術的大眾化打開了快速通道,使得容器技術的使用進入了主流。Docker的鏡像格式和運行時環境正在迅速成為事實上的工業標準,而它自身也在變成云時代的基礎“構件”。
Docker引擎可理解為一套輕量級應用運行時環境,應用及其依賴被隔離在相互獨立的運行環境中,但是它們卻共享一個OS內核,人們形象地將這種環境稱為“容器”。這種將多個應用部署在一臺主機上以相互獨立的“容器”運行的模式,不僅能提高硬件利用率,還能減少應用故障對其他應用的影響。
Docker引擎使用了客戶端–服務器的運行模式,其主體以守護程序方式運行在每臺需要使用它的主機上。客戶端既可以與守護程序運行在同一臺主機上,也可以通過Restful形式的API遠程訪問它。Docker引擎服務器端不僅提供了對容器生命周期的完整管理功能,還將容器的創建基礎——“鏡像”的管理功能也納入其中,為用戶提供了“一站式”容器管理工具集。它用Go語言編寫而成,需要利用操作系統的虛擬文件系統、命名空間、控制組等特性來實現自己的功能,并需要不少外部庫的支持。Docker引擎目前已經能夠支持Linux、MacOS和Windows三種操作系統,可以部署在物理機、虛擬機和公有云等多種環境中。
在Docker中,“鏡像”是創建容器的基礎。Docker使用分層的方式存儲鏡像,鏡像中包含應用運行所需要的組件。鏡像之間可以通過引用的方式共享鏡像層,減少了對存儲空間的占用,讓大家既能享受“隔離”帶來的好處,又能減輕資源浪費帶來的苦惱。而容器環境是根據鏡像來動態創建的,容器中應用的寫操作只改變自己的讀寫層,公共的鏡像部分對所有容器都是只讀的。
Docker還為鏡像分發設計了倉庫機制,通過本地和遠程倉庫之間的上傳和下載可實現軟件的標準化分發,打通了從應用開發、鏡像構建、發布、下載到應用部署的完整通道。Docker專門構建了完全開放的鏡像倉庫hub.docker.com,幫助全世界的軟件廠商、開發者和使用者以最小的時間和技術成本體驗到容器技術帶來的好處;它無疑為統一的鏡像格式的推廣使用立下汗馬功勞。
在Linux操作系統上,Docker利用內核所提供的namespace和CGroups特性為應用進程構建起沙箱和資源限制:在此沙箱容器中,應用擁有自己的設備文件、進程間通信環境、根文件系統、進程空間、用戶賬戶空間和網絡資源空間;管理員可以以容器為單位來限制應用對CPU、內存、磁盤I/O和網絡等資源的使用能力。運用這兩個技術,Docker為應用構建了既輕又堅固的容器外殼,同時,它還將內核提供的很多不同的安全相關技術集成起來,為用戶在云時代應對各種挑戰準備了豐富和先進的技術裝備。
Docker引擎自身的功能也在不斷演進之中,它不僅包含了容器和鏡像管理功能,還逐步擴展出編排和集群管理功能,正在構建一個容器平臺。在此過程中,既有的接口形式沒有改變,Dockerd守護進程也繼續擔當自己的職責;而原有的核心的容器和鏡像管理功能被剝離,由Containerd來負責。這是一個由Docker貢獻出的新的開源項目,它不僅以更底層和高效的接口來暴露這些核心功能,還從鏡像和容器存儲的層面實現了多租戶的特性。同時,Docker將容器運行時接口和鏡像格式在OCI(開放容器倡議,Open Container Initiative)組織的框架下進行了標準化,并于2017年完成了運行時(runtime)和鏡像(image)兩個標準,固化了Docker核心技術要素,消除了容器技術發展碎片化的陰影。這個標準化過程的另一個重要產物是Linux上的參考實現:RunC開源項目。Containerd正是通過這個關鍵組件來完成容器生命周期管理的。由此可見,當前版本Docker引擎實際上由Dockerd、Containerd和RunC等組件構成;為了表述方便,還是統一稱為Docker引擎。
在上述演進過程中,Docker自身不僅由于剝離了一些底層核心功能而得以輕裝上陣,發展自己獨有的容器平臺功能,而且整個開源社區也受益于這些被剝離出的核心組件。它們的API演進不再受到Docker平臺的影響,功能可以更好地適配業已迅速發展起來的容器生態環境的需求,成為名副其實的容器時代的基礎“構件”。
Kubernetes Docker
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。