docker映像中包含了提供容器運行時所需的程式、庫、資源、配置等文件,以及為運行時準備的一些配置參數;鏡像是一個特殊的文件系統,不包含任何動態數據,其中的內容在建置之後也不會被改變。
本教學操作環境:linux7.3系統、docker19.03版、Dell G3電腦。
先了解下什麼是映像:
我們都知道,作業系統分為 核心 和 使用者空間。對於 Linux 而言,核心啟動後,會掛載 root 檔案系統為其提供使用者空間支援。而 Docker 映像(Image),就等於是一個 root 檔案系統。例如官方鏡像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系統的 root 檔案系統。
Docker 映像 是一個特殊的檔案系統,除了提供容器運行時所需的程式、庫、資源、配置等檔案外,還包含了一些為運行時準備的一些設定參數(如匿名卷、環境變數、使用者等)。鏡像 不包含 任何動態數據,其內容在建置之後也不會被改變。
分層儲存
因為映像包含作業系統完整的root 檔案系統,其體積往往是龐大的,因此在Docker 設計時,就充分利用的技術,將其設計為分層儲存的架構。所以嚴格來說,鏡像並非是像一個ISO 那樣的打包文件,鏡像只是一個虛擬的概念,其實際體現並非由一個文件組成,而是由一組文件系統組成,或者說,由多層文件系統聯合組成。
鏡像建構時,會一層層構建,前一層是後一層的基礎。每一層建置完就不會再改變,後一層上的任何改變只會發生在自己這一層。例如,刪除前一層文件的操作,實際上不是真的刪除前一層的文件,而是僅在當前層標記為該文件已刪除。在最終容器運行的時候,雖然不會看到這個文件,但是實際上該文件會一直跟隨鏡像。因此,在建造鏡像的時候,需要額外小心,每一層盡量只包含該層需要添加的東西,任何額外的東西應該在該層構建結束前清理掉。
分層儲存的特徵也使得鏡像的重複使用、自訂變更的更為容易。甚至可以用之前建造好的鏡像作為基礎層,然後進一步添加新的層,以自訂自己所需的內容,建立新的鏡像。
擴展知識:
可以將映像理解為類別(Class)。
首先需要先從鏡像倉庫服務中拉取鏡像。常見的映像倉庫服務是 Docker Hub,但也存在其他映像倉庫服務。
拉取作業會將映像下載到本機 Docker 主機,可以使用該映像啟動一個或多個容器。
鏡像由多個層組成,每層疊加之後,從外部看來就如一個獨立的物件。鏡像內部是一個精簡的作業系統(OS),同時也包含應用程式運作所必須的檔案和依賴套件。
因為容器的設計初衷就是快速和小巧,所以鏡像通常都比較小。
前面多次提到鏡像就像停止運作的容器(類別)。實際上,可以停止某個容器的運行,並從中建立新的鏡像。
在該前提下,鏡像可以理解為一種建構時(build-time)結構,而容器可以理解為一種運行時(run-time)結構,如下圖所示。
推薦學習:《docker影片教學》
以上是docker映像中包含什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!