Docker面試題(二)


什么是虛擬化?

  虛擬化允許您在相同的硬件上運行兩個完全不同的操作系統。每個客戶操作系統都經歷了引導,加載內核等所有過程。您可以擁有非常嚴格的安全性,
例如,客戶操作系統無法完全訪問主機操作系統或其他客戶端並搞砸了。 可以基於虛擬化方法如何模仿客戶操作系統的硬件並模擬客戶操作環境來對虛擬化方法進行分類。主要有三種類型的虛擬化: • 仿真 • 半虛擬化 • 基於容器的虛擬化

 

Docker與虛擬機有何不同?

  Docker不是虛擬化方法。它依賴於實際實現基於容器的虛擬化或操作系統級虛擬化的其他工具。為此,Docker最初使用LXC驅動程序,然后移動
到libcontainer現在重命名為runc。Docker主要專注於在應用程序容器內自動部署應用程序。應用程序容器旨在打包和運行單個服務,而系統
容器則設計為運行多個進程,如虛擬機。因此,Docker被視為容器化系統上的容器管理或應用程序部署工具。 • 與虛擬機不同,容器不需要引導操作系統內核,因此可以在不到一秒的時間內創建容器。此功能使基於容器的虛擬化比其他虛擬化方法更加獨特和可取。 • 由於基於容器的虛擬化為主機增加了很少或沒有開銷,因此基於容器的虛擬化具有接近本機的性能 • 對於基於容器的虛擬化,與其他虛擬化不同,不需要其他軟件。 • 主機上的所有容器共享主機的調度程序,從而節省了額外資源的需求。 • 與虛擬機映像相比,容器狀態(Docker或LXC映像)的大小很小,因此容器映像很容易分發。 • 容器中的資源管理是通過cgroup實現的。Cgroups不允許容器消耗比分配給它們更多的資源。雖然主機的所有資源都在虛擬機中可見,但無法使用。
這可以通過在容器和主機上同時運行top或htop來實現。所有環境的輸出看起來都很相似。

 

容器內部機制?

  大約在2006年,包括Google的一些員工在內的人們實現了名為命名空間的新的Linux內核級功能(不過這個想法早在FreeBSD中就已存在)。
操作系統的一個功能是允許將全局資源(如網絡和磁盤)共享到進程。如果將這些全局資源包裝在命名空間中,以使它們僅對在同一命名空間中
運行的那些進程可見,該怎么辦?比如說,你可以獲得一大塊磁盤並將其放在命名空間X中,然后在命名空間Y中運行的進程無法查看或訪問它。
類似地,名稱空間X中的進程無法訪問分配給名稱空間Y的內存中的任何內容。當然,X中的進程無法查看或與名稱空間Y中的進程通信。這為全局
資源提供了一種虛擬化和隔離。   這就是Docker的工作原理:每個容器都在自己的命名空間中運行,但使用與所有其他容器完全相同的內核。發生隔離是因為內核知道分配給
進程的命名空間,並且在API調用期間確保進程只能訪問其自己的命名空間中的資源。

 

什么是Docker Hub?

  Docker hub是一個基於雲的注冊表服務,允許您鏈接到代碼存儲庫,構建鏡像並測試它們,存儲手動推送的鏡像以及指向Docker
雲的鏈接,以便您可以將鏡像部署到主機。它為整個開發流程中的容器鏡像發現,分發和變更管理,用戶和團隊協作以及工作流自動化提
供了集中資源。

 

鏡像與 UnionFS

  Linux 的命名空間和控制組分別解決了不同資源隔離的問題,前者解決了進程、網絡以及文件系統的隔離,后者實現了 CPU、
內存等資源的隔離,但是在 Docker 中還有另一個非常重要的問題需要解決 - 也就是鏡像。Docker 鏡像其實本質就是一個壓縮
包,我們可以使用命令將一個 Docker 鏡像中的文件導出,你可以看到這個鏡像中的目錄結構與 Linux 操作系統的根目錄中的內容
並沒有太多的區別,可以說 Docker 鏡像就是一個文件。

 

 

存儲驅動 

 

  Docker 使用了一系列不同的存儲驅動管理鏡像內的文件系統並運行容器,這些存儲驅動與Docker 卷(volume)有些不同,
存儲引擎管理着能夠在多個容器之間共享的存儲。當鏡像被 docker run 命令創建時就會在鏡像的最上層添加一個可寫的層,也
就是容器層,所有對於運行時容器的修改其實都是對這個容器讀寫層的修改。容器和鏡像的區別就在於,所有的鏡像都是只讀的而每
一個容器其實等於鏡像加上一個可讀寫的層,也就是同一個鏡像可以對應多個容器UnionFS 其實是一種為 Linux 操作系統設計的
用於把多個文件系統『聯合』到同一個掛載點的文件系統服務。而 AUFS 即 Advanced UnionFS 其實就是 UnionFS 的升級版,
它能夠提供更優秀的性能和效率。AUFS 只是 Docker 使用的存儲驅動的一種,除了 AUFS 之外,Docker 還支持了不同的存儲
驅動,包括 aufs、devicemapper、overlay2、zfs 和 vfs 等等,在最新的 Docker 中,overlay2 取代了aufs 成為了
推薦的存儲驅動,但是在沒有 overlay2 驅動的機器上仍然會使用 aufs 作為 Docker 的默認驅動。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM