Docker 容器

映像檔(Image)和容器(Container)的關係,就像是物件導向程式設計中的實例一樣,映像檔是靜態的定義,容器是映像檔執行時的實體。容器可以被建立、啟動、停止、刪除、暫停等。

容器的實質是處理序,但與直接在宿主執行的處理序不同,容器處理序執行於屬於自己的獨立的 命名空間。因此容器可以擁有自己的 root 檔案系統、自己的網路設定、自己的處理序空間,甚至自己的使用者 ID 空間。容器內的處理序是執行在一個隔離的環境裡,使用起來,就好像是在一個獨立於宿主的系統下作業一樣。這種內容屬性使得容器IP應用比直接在宿主執行更加安全。也因為這種隔離的內容屬性,很多人初學 Docker 時常常會把容器和虛擬機搞混。

前面講過映像檔使用的是分層儲存,容器也是如此。每一個容器執行時,是以映像檔為基礎層,在其上建立一個目前容器的儲存層,我們可以稱這個為容器執行時讀寫而準備的儲存層為容器儲存層

容器儲存層的生存週期和容器一樣,容器消亡時,容器儲存層也隨之消亡。因此,任何儲存於容器儲存層的資訊都會隨容器刪除而丟失。

按照 Docker 最佳實踐的要求,容器不應該向其儲存層內寫入任何資料,容器儲存層要保持無狀態化。所有的檔案寫入作業,都應該使用 資料卷(Volume)、或是繫結宿主目錄,在這些位置的讀寫會略過容器儲存層,直接對宿主(或網路儲存)發生讀寫,其效能和穩定性更高。

資料卷的生存週期獨立於容器,容器消亡,資料卷不會消亡。因此,使用資料卷後,容器可以隨意刪除、重新 run,資料卻不會丟失。

results matching ""

    No results matching ""