原來這就是Docker的文件系統?

別讓別人告訴你,你成不了才,即便是我也不行。——《當幸福來敲門》
在這裏插入圖片描述
插畫來自網絡

前言

這一篇文章我來給大家介紹下docker的文件系統,經過查閱了很多的官方文檔以及其他網絡上的文章總結出來的,希望大家通過這篇文章能夠知道 到底容器是什麼?以及 容器跟虛擬機到底有什麼本質的區別?

容器是什麼

在前面的文章中我們爲什麼選擇Docker一文中我已經給大家介紹過docker與虛擬機的原理和區別了,但是,即便我不懂容器也並不會影響我使用它,這就和我們開車一樣,我雖然不懂發動機的原理,但是我仍然可以輕鬆的使用打火,離合,剎車,轉向這些功能,來達到駕駛的目的。

雖然說不懂修車,不懂發動機原理不影響我們開車,但是如果我們想要改造一個汽車,就必須要對汽車的整體結構和發動機十分的熟悉才行了。

當我們通過命令docker run將鏡像構建成容器的時候,我們就要康康容器的內部有什麼了。
我們可以通過docker exec -it 容器名稱/容器id bash命令來進入容器。
在這裏插入圖片描述
可以通過ll命令來查看容器內部,然後就會驚奇的發現容器內部居然是一個完整的操作系統,它不僅有root目錄,有bin目錄,還有bin,proc,var等等,而且我們可以在容器內部運行我們經常使用的Linux命令,好像我們就是在一個虛擬機中一樣,和宿主機(Ubuntu)咩有任何的關係。
在這裏插入圖片描述
但是我們在之前的文章中就說過,docker是直接使用宿主機的內核,而不是像虛擬機那樣虛擬出一整個操作系統,所以,這裏我們操作的每個命令就是在宿主機上運行的,但是虛擬機不是,虛擬機上運行的任何程序,任何東西都不會影響宿主機,是完全隔離開的。

所以我們經常會看到別人說:容器比較節約資源,但是Docke到底是如何欺騙我們的,就需要先了解他的文件系統

聯合文件系統:aUFS

AUFS:全稱 Union File System,又叫做 Another UnionFS,所謂的UnionFS,就是把不同物理位置的目錄合併mount到同一個目錄。而docker就是通過這個特性實現了鏡像層的重疊,容器層的存儲和顯示層的展示

aUFS的工作原理

在這裏插入圖片描述
可以看到,假設我們存在2個目錄X,Y,分別有A,B文件,那麼aUFS的作用就是將這兩個目錄合併,並且重新掛載的Z上,這樣在Z目錄上就可以同時看到A和B文件。這就是聯合文件系統,目的就是將多個文件聯合在一起成爲一個統一的視圖

在這裏插入圖片描述
如上圖,我們在Z目錄中刪除B文件,同時,在A文件中增加一些內容,如Hello。此時可以發現,X內的A文件新增了Hello,並且新增了一條B被刪除的記錄,但是Y中的B並沒有任何變化。這是aUFS的一個重要特性。在所有的聯合起來的目錄中,只有第一個目錄是有寫的權限,即我們不管如何的去對Z進行修改操作,都只能對第一個聯合進來的X修改,對Y是沒有權限修改的。

但是如果我們在Z中對Y中的文件進行了修改,它雖然沒有權限去修改Y目錄中的文件,但是它會在第一層目錄添加一個記錄來記錄更改內容

aUFS用來做了什麼

在這裏插入圖片描述
我們再來看一下這張圖,我們通過docker history + 鏡像ID來查看鏡像的歷史。
當鏡像啓動的時候,一個新的可寫層會加載到鏡像的頂部,這一層我們一般稱爲容器層,之下是鏡像層。
容器層可以讀寫,容器所有發生文件變更都發生在這一層,而鏡像層是read-only只讀

根據aUFS的定義,容器的文件系統就是由下面的15個只讀鏡像層和1個可寫的容器層通過aUFS mount出來的。

到這裏,就能和前面的aUFS聯繫起來了,X就是容器層,可修改,可記錄,Y就是鏡像層,不可更改,只讀,而Z就是我們進入聯合起來的視圖層
在這裏插入圖片描述

Docker的分層鏡像

瞭解了aUFS之後,再來看一下docker的分層鏡像。

在這裏插入圖片描述
我們通過對容器層A的修改重新構建了一層鏡像,此時的鏡像由原來的Y和X共同構成。
當我們運行這個新的鏡像的時候,就創建出了一個新的容器P,而這個新創建的容器層P會繼續接受視圖層的更改請求。

可以看到X只是針對Y作出更改,而P只是針對重疊後的X做出更改,這種上層鏡像只記錄對下層鏡像更改的方式,就是docker的分層鏡像系統。
在這裏插入圖片描述
如上圖,我們通過pull或者push一個鏡像的時候,會發現由很多的layer,是一個十幾層的鏡像。

總結

容器的本質並非完整的操作系統,而是通過聯合文件系統展示出來的視圖隔離文件之間的文件系統,如同我們看到的docker Logo一樣。
在這裏插入圖片描述
鯨魚就是我們的宿主機,集裝箱就是各種各樣的容器,那麼容器與容器之間是如何隔離的呢?Namespace(名稱空間),聯合文件系統,cgroups(控制組,進行資源隔離)慢慢來。

結束

如果本篇博客有任何錯誤,請批評指教,不勝感激 !

一起寫作

在這裏插入圖片描述
▲掃描二維碼“識別”關注 簡介:熱愛生活,享受旋律!

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