虛擬機 與 Docker容器




一、Docker 與 Hypervisor


在這裏插入圖片描述


Docker 並不像 Hypervisor 那樣對應用進程的隔離環境負責,也不會創建任何實體的“容器”,
真正對隔離環境負責的還是宿主機操作系統本身。

Docker 項目在這裏扮演的角色,更多的是旁路式的輔助和管理工作。




二、Docker 容器明顯優勢:敏捷 和 高性能


1、使用虛擬化技術作爲應用沙盒,就必須要由 Hypervisor 來負責創建一個真實存在的虛擬機,
它裏面必須運行一個完整的 Guest OS 才能執行用戶的應用進程。

這會帶來額外資源消耗:
虛擬機本身佔用 100~200 MB 內存;
用戶應用運行在虛擬機裏面,它對宿主機操作系統的調用要經過虛擬化軟件的攔截和處理,存在性能損耗;
對計算資源、網絡和磁盤 I/O 的損耗大。


2、容器化後的用戶應用依然還是一個宿主機上的普通進程,這意味着因爲虛擬化而帶來的性能損耗,對容器來說是不存在的;
使用 Namespace 作爲隔離手段的容器並不需要單獨的 Guest OS,這就使得容器額外的資源佔用幾乎可以忽略不計。




三、Docker 容器明顯劣勢: 隔離得不徹底


1、容器只是運行在宿主機上的一種特殊的進程,多個容器共享宿主機的操作系統內核。

共享宿主機內核意味着:
如果要在 Windows 宿主機上運行 Linux 容器,或者在低版本的 Linux 宿主機上運行高版本 Linux 容器,都是行不通的。
而相比之下,擁有硬件虛擬化技術和獨立 Guest OS 的虛擬機就要方便得多了。


2、在 Linux 內核中,有很多資源和對象是不能被 Namespace 化的

比如:時間。
如果容器中的某個程序使用 settimeofday(2) 系統調用修改了時間,那麼整個宿主機的時間都會被隨之修改,




由於上述問題的存在,導致容器給應用暴露出來的攻擊面是相當大的。

雖然使用 Seccomp 等技術可以對容器內部發起的所有系統調用進行過濾來進行安全加固,但多的這層對系統調用的過濾對性能是有損的。
而且默認情況下,到底該開啓哪些系統調用禁止哪些系統調用,這是個問題。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章