容器化-Docker-2-簡述容器化技術
容器這個名詞的由來
說道這個容器這個詞,包括我們在網路上搜索的時候容器對應的最多的也是集裝箱
那麼容器這個詞是怎麼由來呢?在早起海運的時候貨物都是隨便堆放的,這對於後期的解除安裝和管理都是一個不小的難題
- 包裝困難,每個貨物都需要有自己的包裝
- 裝卸困難,每個貨物的大小、重量都不一樣需要不同的裝卸工具
集裝箱(容器誕生後)
- 簡化了包裝,為避免貨物在運輸途中受到損壞,必須有堅固的包裝,而集裝箱具有堅固、密封的特點,其本身就是一種極好的包裝
- 首先是裝卸效率特別低(普通貨船裝卸,一般每小時為35t左右,而集裝箱裝卸,每小時可達400t左右)
上面就是容器誕生的原因了
container這個詞有:集裝箱和容器兩個含義,集裝箱技術比較繞口、容器技術就成了container的實際翻譯了
什麼是容器技術
實機時代
痛點:
- 多個APP放在一臺機上:存在資源搶佔以及故障影響
- 多個APP放在多臺機器:存在資源浪費
解決方案:
- 大家通過虛擬軟體來管理虛擬機器:建立、執行、銷燬解決了當時人們的訴求
虛機時代
隨著人們用虛擬化用的越來越溜,對資源的利用率越來越高
思考下我就為了啟動一個應用程式,我付出了什麼
- 我就的安裝一遍作業系統
- 重新部署一遍服務、還的確保一遍就正確
- 虛機掛了、宿主掛了,上面的東西重新來一遍
提煉下目前的痛點:
- 效率低
- 易出錯
- 容錯低
容器時代
人們需要一個新的技術,來解決當前的痛點,容器技術就誕生了
映象&容器
容器技術由兩部分組成:
- 映象(特殊格式的打包檔案)
- 容器(依賴核心功能建立的映象執行空間)
映象:包含了程式、程式依賴的Lib、環境,本質上就是一個壓縮包(它解決了環境一致性的問題)
容器:是核心建立的一個隔離的空間,執行映象(它解決了隔離問題防止程式互相干擾)
- 核心功能Namespace:隔離 (名稱空間,是Linux核心功能,對核心分割槽分為不同的空間,讓程式感覺獨佔一個系統)
- 核心功能Cgroup:限制 (是control groups[控制組]的縮寫,是一種Linux核心功能,用於限制,說明和隔離程序集合的資源使用(CPU,記憶體,磁碟I/O,網路等)
核心的名稱空間就類似,一個教學樓,N個班級公用這個教學樓,每個班級都可以上課公用教學樓的資源
如何讓程式以為自己在獨立使用這個系統呢?我們建立的獨立執行空間通過Namespace來讓程式感覺自己在獨立的系統中執行,那一個系統都應該有什麼
Linux namespace 實現了 7 項資源隔離,基本上涵蓋了一個小型作業系統的執行要素,包括主機名、使用者許可權、檔案系統、網路、程序號、程序間通訊、資源。
NameSpace | 系統呼叫引數 | 隔離內容 | 核心支援的版本 |
---|---|---|---|
Mount namespaces | CLONE_NEWNS | 掛載點 | Linux 2.4.19 |
UTS namespaces | CLONE_NEWUTS | 主機名 | Linux 2.6.19 |
IPC namespaces | CLONE_NEWIPC | 程序間通訊 | Linux 2.6.19 |
PID namespaces | CLONE_NEWPID | 程序號 | Linux 2.6.24 |
Network namespaces | CLONE_NEWNET | 網路 | Linux 2.6.29 |
User namespaces | CLONE_NEWUSER | 使用者許可權 | Linux 3.8 |
Cgroup namespaces | CLONE_NEWCGROUP | 資源 | Linux 4.6 |
每個namespace的特性都解決了特定的需求,是逐步迭代的,好比之前就支援6個namespace,到現在已經支援7個了
這裡簡單說下,映象和容器和Docker的關係:
- Docker建立映象
- Docker通過實現呼叫Linux核心功能(Linux namespace)建立執行空間執行映象
映象和容器的關係
要說區別其實不太恰當,它們應該是階段的關係
容器技術和Dokcer的關係
Dokcer實現了容器技術:
- Docker實現了高效產生映象的功能
- Docker實現了管理容器的功能,呼叫核心特性(Nmaespace&Cgroup)然後:建立容器、管理容器、銷燬容器
- Docker的出現推動了容器技術的飛速發展(一次構建,到處執行[Build once, run everywhere])
容器技術的發展催生了,容器標準OCI(Open Container Initiative 開放容器倡議),Docker也遵循這個標準
OCI(open container initiative開放容器標準)
- 容器映象標準(映象怎麼打)
- 容器執行時標準(容器怎麼執行管理:配置、執行環境、生命週期)
決了什麼問題
- 環境不一致(映象:把所需的環境、程式碼、資料打包成映象)
- 程式隔離問題(容器:核心建立的獨立執行空間,讓程式與程式之間隔離)
- 資源浪費問題(公用底層的:硬體、系統(核心))
- 管理管理麻煩問題(構建映象方便、管理容器方便)
Docker
為什麼是Docker
Docker是容器的解決方案之一,其他的還有Podman、coreos等那為什麼選擇Docker
最火的容器解決方案
容器創業公司 Sysdig 釋出了 2019 年容器使用報告 Docker 佔據了容器平臺市場的大部分份額,佔比為 79%,而排在第二位的是 containerd,佔比為 18%,排在第三位的 CRI-O 專案,佔比為 4%。這個調查結果與信通院的國內市場調查結果有異曲同工之妙,國內近六成企業選擇 Docker 作為容器執行技術。
優勢
- DockerFile快速構建一個映象
- 映象版本控制
- 還提供了免費的映象倉庫
- 跨平臺(win、linux、ubuntu、mac)一次部署到處使用
- 活躍的社群和生態
擴充套件閱讀
NameSpace詳解
1、UTS namespace
UTS(UNIX Time-sharing System) namespace提供主機名和域名的隔離,這樣每個docker容器就可以擁有獨立的主機名和域名,在網路上可以被視作一個獨立的節點,而非宿主機上的程序了。
2、IPC namespace
程序間通訊(Inter-Process Cmmunication,IPC)涉及的IPC資源包括常見的訊號量、訊息佇列和共享記憶體。申請IPC資源就申請了一個全域性唯一的32位ID,所以IPC namespace中實際上包含系統IPC識別符號以及實現POSIX訊息佇列的檔案系統。在同一個IPC namespace下的程序彼此可見。
3、PID namespace
Linux核心為所有的PID namespace維護了一個樹狀結構,最頂層的是系統初始時建立的,被稱為root namespace。它建立的新的PID namespace稱為child namespace(樹的子節點),而原先的PID namespace就是新建立的PID namespace的parent namespace(樹的父節點)。通過這種方式,不同的PID namespace會形成一個層級體系。所屬的父節點可以看到子節點中的程序,並可以通過訊號等方式對子節點中的程序產生影響,反過來,子節點卻不能看到父節點PID namespace中的任何內容。
4、mount namespace
mount namespace通過隔離檔案系統掛載點對隔離檔案系統提供支援,隔離後,不同mount namespace中的檔案結構發生變化也互不影響。
5、network namespace
network namespace主要提供了關於網路資源的隔離,包括網路裝置、IPv4、IPv6協議棧、IP路由表、防火牆、/proc/net目錄、/sys/class/net目錄、套接字(socket)等。一個物理的網路裝置最多存在於一個network namespace中,可以通過建立veth pair在不同的network namespace間建立通道,以達到通訊目的。
6、user namespace
user namespace主要隔離了安全相關的識別符號(identifier)和屬性(attribute),包括使用者ID、使用者組ID、root目錄、key(金鑰)以及特殊許可權。
容器化和虛擬化有啥區別
說道Docker不得不說一下虛擬化,我相信大部分人或多或少都用過Vmware這些虛擬化軟體。
我們使用虛擬化軟體,可以虛擬出一個物理主機來(我們稱之為虛擬機器),然後給他重新安裝系統
原理對比
虛擬化
虛擬化的原理:在OS中加入一個虛擬化層,虛擬化層可以對下層(HostOS)硬體資源(物理CPU、記憶體、磁碟、網絡卡、顯示卡等)進行封裝、隔離,抽象為另一種形式的邏輯資源,再提供給上層(GuestOS)使用。所以你可以理解VMM其實就是聯絡HostOS和GuestOS的一箇中間件,當然虛擬化可以將一份資源抽象為多份,也可以將多份資源抽象為一份。
通過虛擬化技術實現的虛擬機器一般被稱之為GuestOS(客戶),而作為GuestOS載體的物理主機稱之為HostOS(宿主)。
容器化
容器技術通通過主機HostOS(核心),虛擬化一個執行空間(本質上是執行在HostOS上),執行程式
- 啟動快:虛機這邊要啟動一個程式首先要建立一個虛擬系統然後在安裝成,容器化就是啟動個程式這麼簡單
- 速度快:虛機排程還是需要經過一個虛擬系統層,容器直接執行在(HostOS上)少了一層速度肯定會快
出處:http://www.cnblogs.com/luotianshuai/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線。