虛擬化技術(shù)的前世今生
虛擬化技術(shù)可以通俗的理解成“把一臺(tái)電腦虛擬成N臺(tái)電腦”。
***個(gè)流派叫做“硬件虛擬化”
硬件虛擬化的機(jī)制超級(jí)復(fù)雜,我認(rèn)慫。。。
這里貼上這篇科普文章,感興趣的小伙伴請(qǐng)猛戳這里
科普:什么是硬件虛擬化技術(shù)
https://baijiahao.baidu.com/s?id=1573894724153924&wfr=spider&for=pc
第二個(gè)流派叫做“軟件虛擬化”
其實(shí)軟件虛擬化,各位小伙伴都玩過,以前為了玩某些特殊的日本游戲,我們通常會(huì)在自己的電腦上安裝一個(gè)虛擬機(jī),畫了張圖進(jìn)行說明:
首先,我們自己的電腦,即圖中***層的“硬件”;
然后,在這臺(tái)電腦上安裝操作系統(tǒng),即圖中“物理機(jī)操作系統(tǒng)”;
再然后,我們?cè)谶@個(gè)操作系統(tǒng)上安裝VMWare之類的虛擬機(jī)管理軟件,即圖中“Hypervisor”;
再然后,在虛擬機(jī)管理軟件上安裝一個(gè)虛擬機(jī),即圖中“虛擬操作系統(tǒng)”;
***,在虛擬操作系統(tǒng)上,安裝那些特殊的日本游戲,即同種“應(yīng)用軟件”;
圖中紅框,就是軟件虛擬化技術(shù),從而實(shí)現(xiàn)了把一臺(tái)真實(shí)的物理機(jī)器,切分成了N臺(tái)虛擬的機(jī)器。
另外,Java虛擬機(jī)、.Net框架也是一種軟件虛擬化技術(shù)。
第三個(gè)流派叫做“容器化”
容器化流派就是利用了Linux的LXC、CGroup等技術(shù)。
LXC的本質(zhì)就是“進(jìn)程隔離、資源隔離”——1臺(tái)物理機(jī)切分成N臺(tái)虛擬機(jī)成為了可能;
CGroup的本質(zhì)就是LXC的資源管理機(jī)制——N臺(tái)虛擬機(jī)誰占用物理機(jī)多少CPU?內(nèi)存?
具體的技術(shù)講解,貼上百度百科,有興趣的同學(xué)請(qǐng)自行腦補(bǔ)
LXC介紹
https://baike.baidu.com/item/lxc/6014808?fr=aladdin
CGroup介紹
https://baike.baidu.com/item/Cgroup
Docker容器化的架構(gòu)(如下圖)
- 關(guān)鍵點(diǎn)1:物理操作系統(tǒng)上安裝上Docker的守護(hù)進(jìn)程;
- 關(guān)鍵點(diǎn)2:Docker上運(yùn)行著N個(gè)容器;
- 關(guān)鍵點(diǎn)3:Docker為每個(gè)容器分配指定的硬件資源(CGroup);
- 關(guān)鍵點(diǎn)4:每個(gè)容器彼此隔離,你不知我,我不知你(LXC之Namespace);
- 關(guān)鍵點(diǎn)5:每個(gè)容器非常小、非常小、非常小
***,展開一下在Docker的官網(wǎng)上、各類書籍中常見的這張Docker架構(gòu)圖
這張圖畫的很深刻,很形象、簡潔的表達(dá)了Docker的技術(shù)脈絡(luò)
- Docker daemon:docker的守護(hù)進(jìn)程,一切神秘的機(jī)制都包含在此;
- REST API:docker守護(hù)進(jìn)程提供http接口,可以通過http方式操作;
- docker CLI:docker守護(hù)進(jìn)程提供的命令行接口,可以通過命令行方式操作;
- API的分類:無論rest,還是cli,分為4類——鏡像管理、容器管理、數(shù)據(jù)卷管理、網(wǎng)絡(luò)管理
- 鏡像:打個(gè)通俗的比方,我們?cè)谖锢頇C(jī)上安裝一個(gè)windows,然后用Ghost做一個(gè)備份,如果電腦被黑了,馬上把備份拿出來還原,這個(gè)“備份”在Docker的世界里叫做“鏡像”。
- 容器:上面所說的備份,你拿到***臺(tái)物理機(jī)上還原出來,那么這個(gè)還原出來的windows系統(tǒng)就是一個(gè)“容器”——一個(gè)鏡像可以生成出N個(gè)容器
- 數(shù)據(jù)卷:每個(gè)容器如果要把數(shù)據(jù)穿透Docker,直達(dá)物理機(jī)的硬盤,這就要用到數(shù)據(jù)卷。
- 網(wǎng)絡(luò):前文說過,容器和容器,你不知我,我不知你,彼此隔離,即使在同一個(gè)物理機(jī)上的兩個(gè)容器好像網(wǎng)絡(luò)上兩個(gè)孤島,彼此不能通信,打通他們,就要用到網(wǎng)絡(luò)