文章目錄
- 1. 初始虛擬化
-
- 🍑 虛擬化概念
- 🍑 硬件虛擬化
- 2. Docker容器
-
- 🍑 Docker技術的誕生
- 🍑 容器與虛擬化
- 🍑 性能差別
- 🍑 Docker優勢
-
- 編排有序
- 高效易遷移
- 快速部署
- 3. 容器生態系統
-
- 🍑 核心技術
-
- 容器規范
- 容器 runtime
- 管理工具
- 定義工具
- 容器倉庫
- 容器OS
- 🍑 平臺技術
-
- 容器編排引擎
- 容器管理平臺
- 容器PaaS
- 🍑 支持技術
-
- 容器網絡
- 服務發現
- 容器監控
- 數據管理
- 日志管理
- 容器安全
- 4. 總結
1. 初始虛擬化
🍑 虛擬化概念
在計算機技術中,虛擬化(Virtualization) 是一種資源管理技術。
?
虛擬化的目的是在一臺計算機上運行多個系統或應用,從而提高資源的利用率,節約成本。將單臺服務器中的各種資源,如網絡、CPU及內存等,整合轉換為一臺或多臺虛擬機,用戶就可以從多個方面充分利用計算資源。
?
由下圖可以看出,一臺物理機可以擁有多臺虛擬機,而這些虛擬機都是基于物理機運行。
?
其中,物理機又叫作虛擬機的宿主機(可簡稱為主機),只要它處于正常運行狀態,就可以一直承載虛擬機的運行。
?
由于虛擬機基于物理機運行,硬件設備都是共享的,在創建多臺虛擬機時,也要考慮到物理機的配置是否能夠承載足夠數量的虛擬機。
🍑 硬件虛擬化
硬件虛擬化是對宿主機的硬件進行虛擬化,使硬件對用戶隱藏,并將虛擬化的硬件呈現在用戶面前,如下圖所示。
圖中所示的硬件并非真實的物理硬件,而是通過虛擬化技術虛擬出來的,與虛擬機一樣基于物理機硬件。
?
虛擬機的運行需要考慮物理機硬件的配置,例如,將物理機中的網卡取出后,在虛擬機設置中是無法添加網卡的,但只要物理機中有網卡,虛擬機中就可以添加多個網卡。
?
再例如,物理機的內存有 16GB,用戶直接給虛擬機配置 16GB 內存,這也是無法實現的,因為物理機的運行也需要消耗內存。
下面是一些硬件虛擬化的例子👇
Inter-VT(Inter Virtualization Technology,Intel公司的虛擬化技術)。
?
為了解決純軟件虛擬化安全、性能等方面的不足,這種技術可以讓一個 CPU 看起來像是多個 CPU 在工作一樣,從而實現在一臺計算機上同時存在多個操作系統。
?
AMD-V(AMD Virtualization,AMD公司的虛擬化技術)。
?
它是針對 x86 處理器系統架構的一組硬件擴展虛擬化技術,可以簡化純軟件的虛擬化解決方案,改進 VMM(VirtualMachine Manager,虛擬機監視程序)的設計,更充分地利用硬件資源,提高了服務器和數據中心的虛擬化效率。
2. Docker容器
🍑 Docker技術的誕生
容器(Container) 技術是基于虛擬化技術的,它使應用程序可以從一個計算環境快速可靠地轉移到另一個計算環境運行,可以說是一種新型的虛擬化技術。
?
由于容器技術的優越性,越來越多的互聯網公司開始開發容器應用。
?
早在1979年,UNIX系統中就出現了一種 chroot 機制,這是容器技術的維形。
?
2000年,FreeBSD Jails技術出現。它基于 FreeBSD 系統,將計算機分為多個獨立的小型計算系統。
?
2006年,谷歌推出了Process Containers (過程容器)技術,它不僅可以隔離進程,還可以對隔離空間限制計算資源。
?
2008年,出現了第一個完整的容器管理工具——LXC (Linux Container, Linux容器)。
?
2013年,,LMCTFY (Let Me Contain That For you,我為你的程序打包)作為由谷歌開發的開源容器技術,實現了在 Linux 系統中使用容器技術,,LMCTFY 最終成為 Libcontainer 容器管理的重要組成部分。
?
同年,,Docker 技術問世,容器熱度呈爆發式增長,Docker 逐漸成為了容器中的杰出代表,如下圖所示👇
Docker 是一個開源的容器引擎,它可以使開發者打包好的應用程序在 Docker 空間中運行起來。
?
當一臺物理機中運行多個 Docker 容器時,就算其中一個容器出故障,也不會影響到整個業務。
?
Docker技術之所以獨特,是因為它專注于開發人員和系統操作員的需求,將應用程序依賴項與基礎架構分開。目前,容器無處不在,在 Linux、Windows、數據中心、公有云中,都可以看到容器的影子,如下圖所示。
?
我們引入集裝箱的概念來輔助理解 Docker 容器。集裝箱被譽為運輸業與世界貿易最重要的發明。
?
早期的貨物運輸時,設法將不同的貨物放在運輸機上和因貨物規格不同而頻繁進行的貨物裝載與卸載等浪費了大量的人力物力。
?
為此人們發明了集裝箱,根據貨物的形狀、大小,使用不同規格的集裝箱進行裝載,然后再放在運輸機上運輸。
?
集裝箱密封,只有貨物到達目的地才需要拆封,在運輸過程中能夠在不同的運輸機上平滑過渡,避免了資源的浪費。
Docker 容器就是利用了集裝箱的思想,為應用程序提供基于容器的標準化運輸系統。
?
Docker可以將任何應用及其依賴包打包進一個輕量級、可移植、自包含的容器。容器幾乎可以運行在所有操作系統上。
?
因此才有了那句話 “Build Once,Run Anywhere(生成一次,到處運行)”。Docker的思想從其Logo中也不難看出——一堆可移動的集裝箱,如下圖所示。
🍑 容器與虛擬化
傳統的虛擬機技術是模擬出一套硬件,在其上運行一套完整的操作系統,擁有自己獨立的內核。
?
虛擬機包含應用程序、必需的庫或二進制文件,以及一個完整的 Guest 操作系統。
?
而容器沒有進行硬件虛擬,容器包含應用程序和它所有的依賴,容器中的應用進程直接運行在宿主機的內核上,與宿主機共享內核,因此容器比傳統的虛擬機更加輕便。
?
容器技術與虛擬化技術都對需要運行的東西進行隔離,形成一個獨立的運行空間,與宿主機系統互不干擾。虛擬化技術是基于系統的隔離,它對物理層面的資源進行隔離,如下圖所示。
而容器技術與之不同,容器的隔離空間中運行的是應用程序,隔離是基于程序的,不需要將系統隔離,如下圖所示。
相較于虛擬化,容器是更加快捷方便的技術,它的部署與遷移都十分快速,結構更加精簡,運行速率更高。
?
而虛擬化技術需要系統隔離,結構腑腫,無論是部署還是遷移都要消耗大量時間,每次創建都要新建系統,為用戶的操作帶來不便。
🍑 性能差別
虛擬化與容器還有著性能上的區別,如下表所示。
Docker容器的操作系統是共享的,虛擬化的操作系統是獨立的,所以后者的隔離性更強,但也注定結構復雜,無法被廣泛應用到企業中。
?
如今,容器技術已進入成熟階段,為開發人員與運維人員提供了更大的靈活性。容器可以快速部署,提供不變的基礎架構。它們還取代了傳統的修補過程,使組織可以更快地響應問題,并使應用程序更易于維護。
?
容器化之后,應用程序可以部署在任何基礎架構上,如虛擬機、服務器以及運行不同虛擬機管理程序的各種公共云。許多企業從在虛擬化基礎架構上運行容器開始,發現無須更改代碼即可輕松地將其遷移到云。
?
容器本身具有固有的安全性。Docker容器在應用程序之間以及應用程序與主機之間創建隔離層,并通過限制對主機的訪問來減少主機對外暴露的面積,從而保護主機與主機上的其他容器。
?
在服務器上運行的Docker容器具有與在虛擬機上運行時相同的高級限制,來保證業務的安全性。
?
Docker容器還可以通過保護虛擬機本身并為主機提供深度防御來與虛擬化技術完美結合。
目前,大多數企業都有成熟的虛擬化環境,包括備份、監視、自動化工具以及與之相關的人員和流程。
🍑 Docker優勢
目前,Docker 發展趨勢十分樂觀,在企業中得到了廣泛應用。接下來,我們將對 Docker 的優勢進行詳細介紹。
編排有序
在以往的項目交付過程中,常常出現在開發人員這里能夠正常運行,到了運維人員那里卻無法正常運行的情況,使業務不能在第一時間完成上線,導致交付過程效率低下。
?
Docker 提供了一種全新的發布機制。這種發布機制使用Docker鏡像作為統一的軟件制品載體,以Docker 容器作為統一運行環境,通過 Docker Hub 提供鏡像統一協作,最重要的是使用Dockerfile 定義容器內部行為和容器關鍵屬性來做支撐,從而使整個開發交付周期中軟件環境保持統一,大大提高了產品交付效率。
?
Dockerfile 處于整個機制的核心位置。因為在 Dockerfile 中,不僅能夠定義使用者要在容器中進行的操作,而且能夠定義容器中的軟件運行需要的配置,實現了軟件開發和運維在配置文件上達成統一。運維人員能夠使用 Dockerfile 在不同場合下部署出與開發環境一模一樣的 Docker 容器。
高效易遷移
Docker 容器基于開放式標準,幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、個人計算機、服務器等。這種兼容性可以讓用戶輕松地把一個應用程序從一個平臺直接遷移到另外一個平臺。
?
Docker 是一款輕量級應用,在一臺機器上運行的多個 Docker 容器可以共享這臺機器的操作系統內核,能夠做到快速啟動,只需占用很少的服務器資源。鏡像是通過文件系統層進行構造的,并共享一些公共文件,這樣就能有效降低磁盤用量,使用戶能夠更快地下載鏡像。
快速部署
公司進行業務遷移的時候(例如,公司的 IDC 機房要進行搬遷,業務要遷移到云服務器上),通常需要將所有應用在云服務器上重新部署,這些煩瑣的工作極大地浪費了人力,并降低了工作效率。
?
利用Docker容器可以簡化這項工作,實現快速部署。人們只需要在云服務器上運行相應的容器,無須考慮環境因素。
?
Docker 賦予應用的隔離性還獨立于底層的基礎設施。Docker 默認提供最強的隔離,因此應用出現間題也只是單個容器的問題,不會影響到整臺機器。
3. 容器生態系統
Docker 容器能有今天的蓬勃發展,與它生態系統的支持是分不開的。這一套完整的生態系統就是 Docker 發展的基礎,為 Docker 提供了一整套技術支持,包括核心技術、平臺技術、支持技術。
🍑 核心技術
容器的核心技術是用來支持容器在主機上運行起來的技術,如下圖所示
容器規范
雖然 Docker 是最常用的容器之一,但容器不是只有 Docker,還有其他的容器,如 rkt。
?
為了容器技術能夠有更加良好的發展,各個容器技術的開發公司聯合成立了 OCI ( Open Container Initiative,開放容器計劃)組織。OCI組織的主要目的就是定制一套完整的容器規范,以保證各個容器之間能夠兼容。
?
目前已經發布了兩個容器規范,分別是 runtime spec(運行環境規范) 與 image format spec(鏡像格式規范),如下圖所示。
這兩個規范保證了不同公司開發出來的容器能夠在不同的環境下運行,保證了容器的可移植性與互操作性。
容器 runtime
容器 runtime 是指容器的運行環境,用來包容容器的運行。
?
例如,要養一株花,就要給它陽光、空氣和水,來營造一個舒適的環境。容器也是一樣,想要讓它運行起來就要給它相應的環境。
?
目前有三種主流的容器runtime,如下圖所示。
LXC (Linux Containers ) 是一款比較老的容器 runtime,最初 Docker 在 Linux 系統中就是用LXC 作為容器 runtime的,如下圖所示👇
rkt 是Core OS 公司開發的容器 runtime, 目前是 Docker 默認使用的容器 runtime, 如下圖所示。👇
runC 是 Docker 公司自己專門為 Docker 容器開發的 runtime,與 rkt 一樣都是符合 OCI 規范的。
管理工具
管理工具是任何一款應用程序必備的要素,否則將無法對應用進行管理。
?
例如,開車時,司機需要通過方向盤等來對汽車進行操作,用戶則需要通過管理工具來對容器進行操作,如下圖所示。
?
容器的管理工具不僅為用戶提供管理界面,還與 runtime 進行交互,所以不同的 runtime 對應不同的管理工具。
?
LXC對應的容器管理工具是 Ixd。
runC 對應的容器管理工具是 Docker Engine,分為 deamon 與 CLI 兩部分。
?
rkt 對應的容器管理工具是 rktCLI。
定義工具
容器的定義工具用于定義容器的內容與屬性,使用戶隨心所欲地創建自己想要的容器,如下圖所示。
Docker Image 就是 Docker 鏡像,用戶會先根據自己的要求創建一個鏡像,再根據配置好的鏡像創建出容器。DockerImage 相當于一幅設計藍圖,用戶將藍圖規劃完成之后,Docker 程序會按照藍圖創建容器。
?
Dockerfile 是一個文本文件,它包含了在創建鏡像時需要使用的命令,這些都是用戶事先配置完成的。在創建鏡像時,只要指定一個 Dockerfile,Docker 程序就會按照 Dockerfile 中的命令進行鏡像的創建。
?
ACI (App Container Image,應用程序容器鏡像)也是一種容器鏡像,只不過它是由 CoreOS 公司開發的,專門用于 rkt 容器。
容器倉庫
容器倉庫并不是用來存放容器的,而是用來存放鏡像的。
?
用戶可以將使用過的鏡像上傳到容器倉庫中,下次使用時再從容器倉庫中下載需要的鏡像,并且倉庫中的鏡像在一定范圍內是共享的。各類容器倉庫如圖所示。👇
Docker Registry 支持企業自己搭建私有倉庫。
?
Docker Hub 是 Docker 公司為用戶提供的公有倉庫,里面有許多 Docker 鏡像,為廣大用戶提供了極大的便利。
?
Quay.io 也是公有倉庫,只不過是由紅帽(Red Hat)公司提供的。
容器OS
容器 OS(Operating System,操作系統)專門用于容器的運行。
?
雖然幾乎所有的系統都可以通過容器runtime來運行容器,但容器OS比起其他系統更加輕巧,更加適宜容器的運行,容器OS中的容器運行起來更加高效。常見的容器OS如圖所示。
🍑 平臺技術
在容器普及之前,企業為了便于管理,服務器都是分布式部署,容器平臺技術支持容器集群在分布式環境中運行,如圖所示。
容器編排引擎
企業根據業務需求隨時可能會對容器進行創建、遷移或銷毀。容器編排引擎為工程師們提供了更方便的容器集群管理方式。常見的容器編排引擎如圖所示。
Docker Swarm 是 Docker 公司于2014年12月發布的容器編排引擎。
?
Kubernetes 其實是 Google(谷歌)公司早就開發出來的,直到2014年才啟用。Kubernetes同時支持 Docker 容器與 rkt 容器,是目前國內企業中最常用的容器編排引擎之一。
?
Mesos 是一個分布式內核,Marathon 是一個框架,二者結合即可為企業提供完整的容器集群管理引擎。
容器管理平臺
容器管理平臺與容器編排引擎一樣用于管理容器集群,但容器管理平臺是位于容器編排引擎之上的平臺, 它可以兼容各類容器編排引擎。
?
容器管理平臺將編排引擎的功能抽象化地呈現在Web頁面中,使用戶的管理方式更加簡單。常見的容器管理平臺如圖所示。
容器PaaS
PaaS (Platform as a Service,平臺即服務) 是指將研發平臺或環境作為一種服務,通過商業模式提供給用戶或企業。
?
容器 PaaS 就是基于容器的 PaaS,開發人員無須對低層設施進行操作,直接在 PaaS 上進行研發。常見的容器 PaaS 如圖所示。
🍑 支持技術
容器支持技術是用來支持容器設備的技術,有了這些技術的支持,容器才能完整地運行并運用到企業中,如圖所示。
容器網絡
容器運行在物理機中,一臺物理機中又可能會有多個容器。
?
由于業務的架構不同,容器與容器之間或者容器與其他設備之間,都可能需要網絡支持,但它們又相互隔離。
?
容器網絡技術的出現解決了各個設備之間復雜的網絡問題。常見的容器網絡技術如圖所示。
Docker Network 是 Docker 容器本身的網絡技術,Flannel、Weave與 Calico 都是主流的第三方容器網絡技術,企業根據業務的不同需求選擇不同的容器網絡技術。
服務發現
容器集群是動態的,訪問量增大就會自動創建容器,訪問量減小就會自動銷毀容器,還會根據業務需要進行容器遷移。
?
在這樣一系列的變動之后,業務信息也發生改變,服務發現技術將這些變動之后的最新信息通知客戶機,讓客戶能夠準確地訪問服務。常見的服務發現技術如圖所示。
容器監控
在傳統的服務集群中,為確保業務的正常運行,需要對業務進行監控管理。容器集群是動態的,這無疑給容器監控帶來了挑戰。常見的容器監控工具如圖所示。
docker ps/top/stats 是 Docker 自帶的命令行形式的監控工具,docker stats API 是通過接口使用戶可以獲取容器狀態的工具。
數據管理
容器集群既然為用戶提供服務,就會產生數據,為保證這些數據的安全性,就有了容器的數據管理技術。
?
數據管理技術可以使容器集群發生變化時,不對持久化數據造成損失,并且完整地保留新的數據。常見的數據管理技術如圖所示。
日志管理
在用戶訪問網站時,Web 服務會將訪問信息記錄到特定的文件當中,這些文件就是日志文件。
常見的日志管理工具如圖所示。
Docker Logs 是 Docker 容器自帶的日志管理工具。Logspout 通過容器接口從各個容器中收集日志信息,將收集到的日志信息發送給后續的程序進行處理,最終日志信息被寫入日志系統。
容器安全
容器的安全性是企業工程師們時刻要關注的,也是整個企業都需要重視的事情。常見的容器安全工具如圖所示。
Docker 本身也是有安全機制的,它通過對資源的限制與對信息的過濾來提高容器的安全性。另外,還有其他的第三方安全工具,如 Docker Bench、Clair 等。
?
Docker Bench 會按照相關安全規范來對容器進行一系列檢查。
?
Clair 通過對鏡像文件的掃描來發現容器的潛在風險。
4. 總結
本篇文章介紹了容器的基本概念、虛擬化技術、Docker容器相對于傳統虛擬化技術的優勢,以及Docker容器在企業項目中存在的必要性。
?
我們可以清晰地感受到 Docker 容器在生產環境中帶給我們的巨大便利,以及容器對于企業的重要性。
---------------------
作者:飛向星的客機
來源:CSDN
原文:https://blog.csdn.net/m0_63325890/article/details/124675481
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!
內容解析By:CSDN,CNBLOG博客文章一鍵轉載插件