docker鏡像是一個特殊的文件系統(tǒng),除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等);鏡像不包含任何動態(tài)數(shù)據,其內容在構建之后也不會被改變。
本文操作環(huán)境:ubuntu 18.04系統(tǒng)、Docker 20.10.11版、Dell G3電腦。
docker鏡像到底是什么?
先了解下什么是鏡像:
我們都知道,操作系統(tǒng)分為 內核 和 用戶空間。對于 Linux 而言,內核啟動后,會掛載 root 文件系統(tǒng)為其提供用戶空間支持。而 Docker 鏡像(Image),就相當于是一個 root 文件系統(tǒng)。比如官方鏡像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系統(tǒng)的 root 文件系統(tǒng)。
Docker 鏡像 是一個特殊的文件系統(tǒng),除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。鏡像 不包含 任何動態(tài)數(shù)據,其內容在構建之后也不會被改變。
分層存儲
因為鏡像包含操作系統(tǒng)完整的 root 文件系統(tǒng),其體積往往是龐大的,因此在 Docker 設計時,就充分利用 的技術,將其設計為分層存儲的架構。所以嚴格來說,鏡像并非是像一個 ISO 那樣的打包文件,鏡像只是一個虛擬的概念,其實際體現(xiàn)并非由一個文件組成,而是由一組文件系統(tǒng)組成,或者說,由多層文件系統(tǒng)聯(lián)合組成。
鏡像構建時,會一層層構建,前一層是后一層的基礎。每一層構建完就不會再發(fā)生改變,后一層上的任何改變只發(fā)生在自己這一層。比如,刪除前一層文件的操作,實際不是真的刪除前一層的文件,而是僅在當前層標記為該文件已刪除。在最終容器運行的時候,雖然不會看到這個文件,但是實際上該文件會一直跟隨鏡像。因此,在構建鏡像的時候,需要額外小心,每一層盡量只包含該層需要添加的東西,任何額外的東西應該在該層構建結束前清理掉。
分層存儲的特征還使得鏡像的復用、定制變的更為容易。甚至可以用之前構建好的鏡像作為基礎層,然后進一步添加新的層,以定制自己所需的內容,構建新的鏡像。
關于鏡像構建,將會在后續(xù)相關文章中做進一步的講解。
推薦學習:《Docker視頻教程》