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