Docker 鏡像原理
1.像一個(gè)文件聯(lián)合系統(tǒng)UnionFS逐沙,是一種分層哲思、輕量級(jí)并且高性能的文件系統(tǒng),它支持對(duì)文件系統(tǒng)的修改作為一次提交來(lái)一層層的疊加吩案,同時(shí)可以將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下棚赔,Union 文件系統(tǒng)是 Docker 鏡像的基礎(chǔ)。鏡像可以通過(guò)分層來(lái)進(jìn)行繼承徘郭,基于基礎(chǔ)鏡像(沒(méi)有父鏡像)靠益,可以制作各種具體的應(yīng)用鏡像。
- docker的鏡像是由上由一層一層的文件系統(tǒng)組成残揉,這種層級(jí)的文件系統(tǒng)UnionFS胧后。
bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引導(dǎo)加載kernel, Linux剛啟動(dòng)時(shí)會(huì)加載bootfs文件系統(tǒng),在Docker鏡像的最底層是bootfs冲甘。這一層與我們典型的Linux/Unix系統(tǒng)是一樣的绩卤,包含boot加載器和內(nèi)核途样。當(dāng)boot加載完成之后整個(gè)內(nèi)核就都在內(nèi)存中了江醇,此時(shí)內(nèi)存的使用權(quán)已由bootfs轉(zhuǎn)交給內(nèi)核,此時(shí)系統(tǒng)也會(huì)卸載bootfs何暇。
rootfs (root file system) 陶夜,在bootfs之上。包含的就是典型 Linux 系統(tǒng)中的 /dev, /proc, /bin, /etc 等標(biāo)準(zhǔn)目錄和文件
對(duì)于一個(gè)精簡(jiǎn)的OS裆站,rootfs可以很小条辟,只需要包括最基本的命令黔夭、工具和程序庫(kù)就可以了,因?yàn)榈讓又苯佑肏ost的kernel羽嫡,自己只需要提供 rootfs 就行了本姥。由此可見(jiàn)對(duì)于不同的linux發(fā)行版, bootfs基本是一致的, rootfs會(huì)有差別, 因此不同的發(fā)行版可以公用bootfs。
3.鏡像分層的好處就是資源共享
列如:有多個(gè)鏡像都從相同的 base 鏡像構(gòu)建而來(lái)杭棵,那么宿主機(jī)只需在磁盤上保存一份base鏡像婚惫,
同時(shí)內(nèi)存中也只需加載一份 base 鏡像,就可以為所有容器服務(wù)了魂爪。而且鏡像的每一層都可以被共享先舷。
4.docker 鏡像都是只讀的,當(dāng)容器啟動(dòng)時(shí)滓侍,一個(gè)新的可寫層會(huì)加載到鏡像的頂部蒋川,這一層被稱為容器層,容器層之下都稱為鏡像層撩笆。
5.鏡像的構(gòu)建可以通過(guò) Dockfile 和docker commit 這兩種方式
docker commit 方式是在一個(gè)鏡像的基礎(chǔ)上捺球,重新對(duì)該鏡像操作后重新生成的一個(gè)專屬的鏡像。
命令格式 docker commit -m "提交的描述信息" -a "作者信息" 容器ID 要?jiǎng)?chuàng)建的目標(biāo)的鏡像名:[標(biāo)簽名]
示例
-
docker commit -a="xxx" -m=" tomcat without docs" 0976c215374a hyztomcat:1.1
1.png