Dockerfile、Image兔魂、Container
- Dockerfile: 用于描述鏡像的生成規(guī)則。 Dockerfile中的每一條命令咽袜,都在Docker鏡像中以一個獨立鏡像層的形式存在蹦狂。
- Image: 由Dockerfile生成, 呈現(xiàn)層級結(jié)構(gòu), 每層鏡像包含:鏡像文件以及鏡像json元數(shù)據(jù)信息厚满。
- Container: Container 是Image 的動態(tài)運行結(jié)果施逾,概括而言钉答,就是在Docker鏡像之上邦鲫,運行進程灸叼。
Docker 鏡像神汹、容器的基石——聯(lián)合文件系統(tǒng)(UnionFS)
假設(shè)Dockerfile 內(nèi)容如下
FROM ubuntu:14.04
ADD run.sh /
VOLUME /data
CMD ["./run.sh"]
聯(lián)合文件系統(tǒng)對應(yīng)的層次結(jié)構(gòu)如下圖所示
- FROM ubuntu:14.04 :設(shè)置基礎(chǔ)鏡像,此時會使用基礎(chǔ)鏡像ubuntu:14.04的所* 有鏡像層古今,為簡單起見屁魏,圖中將其作為一個整體展示。
- ADD run.sh /:將Dockerfile所在目錄的文件run.sh加至鏡像的根目錄捉腥,此時新一層的鏡像只有一項內(nèi)容氓拼,即根目錄下的run.sh.
- VOLUME /data:設(shè)定鏡像的VOLUME,此VOLUME在容器內(nèi)部的路徑為/data抵碟。需要注意的是桃漾,此時并未在新一層的鏡像中添加任何文件,但更新了鏡像的json文件拟逮,以便通過此鏡像啟動容器時獲取這方面的信息撬统。
- CMD ["./run.sh"]:設(shè)置鏡像的默認執(zhí)行入口,此命令同樣不會在新建鏡像中添加任何文件敦迄,僅僅在上一層鏡像json文件的基礎(chǔ)上更新新建鏡像的json文件恋追。
圖中的頂上兩層,是Docker為Docker容器新建的內(nèi)容罚屋,而這兩層屬于容器范疇苦囱。 這兩層分別為Docker容器的初始層(Init Layer)與可讀寫層(Read-Write Layer)。
- 初始層: 大多是初始化容器環(huán)境時脾猛,與容器相關(guān)的環(huán)境信息撕彤,如容器主機名,主機host信息以及域名服務(wù)文件等尖滚。
- 讀寫層: Docker容器內(nèi)的進程只對可讀寫層擁有寫權(quán)限喉刘,其他層對進程而言都是只讀的(Read-Only)。 另外漆弄,關(guān)于VOLUME以及容器的hosts睦裳、hostname、resolv.conf文件等都會掛載到這里撼唾。