Less Interests
More Interest
Docker鏡像是什么脓恕?(千層餅)
鏡像是一種輕量級衰絮、可執(zhí)行的獨立軟件包寂诱,用來打包軟件運行環(huán)境開發(fā)的軟件躯泰,它包含運行某個軟件所需要的所有內(nèi)容谭羔,包括代碼,運行時需要的庫麦向,環(huán)境變量和配置文件等。
聯(lián)合文件系統(tǒng)(UnionFS)
Union文件系統(tǒng)是一種分層客叉、輕量級并且高性能的文件系統(tǒng)诵竭,它支持對文件系統(tǒng)的修改作為一次提交來一層層疊加,同時可以將不同的目錄掛載到同一個虛擬文件系統(tǒng)下(unite several directories into a single virtual filesystem)兼搏。Union文件系統(tǒng)是Docker鏡像的基礎卵慰。鏡像可以通過分層來繼承,基于基礎鏡像(沒有父鏡像)佛呻,可以制作各種具體的應用鏡像.
特點:
????一次同時加載多個文件系統(tǒng)裳朋,但從外面看起來,只能看到一個文件系統(tǒng)吓著,聯(lián)合加載會把各層文件系統(tǒng)疊加起來鲤嫡,這樣最終的文件系統(tǒng)包含了所有底層的文件和目錄。
Docker鏡像加載原理
docker的鏡像實際上是由一層一層的文件系統(tǒng)組成绑莺,這種層級的文件系統(tǒng)叫聯(lián)合文件系統(tǒng)暖眼。
- bootfs(boot file system)主要包含了bootloader和kernel,bootloader主要是引導加載kernel纺裁,Linux剛啟動是會加載bootfs文件系統(tǒng)诫肠。在docker鏡像最底層就是bootfs。這一層與我們典型的Linux/Unix系統(tǒng)是一樣的欺缘。包含boot加載器和內(nèi)核栋豫。當boot加載完成之后整個內(nèi)核就都在內(nèi)核中了。此時內(nèi)存的使用權(quán)已由bootfs轉(zhuǎn)交給內(nèi)核谚殊,此時系統(tǒng)也會卸載bootfs丧鸯。
- rootfs(root fie system),在bootfs之上络凿。包含的就是典型Linux系統(tǒng)中的/dev,/proc,/bin,/etc等標準目錄和文件骡送。rootfs就是各種不同的操作系統(tǒng)發(fā)行版昂羡,比如Ubuntu,Centos等等摔踱。
鏡像構(gòu)成
對于一個精簡的OS虐先,rootfs可以很小,只需要包含最基本的命令派敷,工具和程序庫就可以了蛹批。底層統(tǒng)一使用Host的kernel,自己只需要提供rootfs就行了篮愉,所以對于不同的鏡像腐芍,bootfs基本是一致的,rootfs有所差別试躏,大家一起共用bootfs猪勇,所以docker鏡像很小,如centos只有200M左右颠蕴。
分層的鏡像
docker是分層的泣刹,在pull鏡像時,下載過程中也是一層一層的下載
docker鏡像分層下載
Docker鏡像采用分層結(jié)構(gòu)的原因
共享資源
比如:有很多鏡像都是從相同的base鏡像構(gòu)建而來犀被,那么宿主機只需要在磁盤上保存一份base鏡像即可椅您,運行時也只需要加載一份base鏡像在容器中,就可以為所有的鏡像提供服務寡键,并且掀泳,鏡像的每一層都可以共享。
特點
Docker鏡像都是只讀的西轩;
當容器啟動時员舵,一個新的可寫層被加載到鏡像的頂部。這一層通常叫做容器層遭商,容器層之下的都叫鏡像層固灵。
Docker鏡像的commit操作
- docker commit 提交容器副本使之稱為一個新的鏡像
docker commit -m="提交的描述信息" -a="作者" 容器ID 要創(chuàng)建的目標鏡像名:[標簽]
如:啟動一個tomcat之后把webapps中的docs文檔刪掉在commit,以后以這個鏡像生成容器運行劫流,都會咩有docs這個文檔
??docker run -it -p 8888:8080
??cd webapps
??rm -rf docs
??docker commit -a="zhazha" -m="delete docs" ca6fd1a3bf91 dokcer/tomcat:1.0
本地提交的鏡像
此時在以這個鏡像生成容器運行巫玻,這個容器也咩有docs文檔含滴。