docker2--基礎(chǔ)學(xué)習(xí)(容器鏡像)

為何容器進(jìn)程看到的文件系統(tǒng)是一個(gè)隔離的環(huán)境:容器進(jìn)程再啟動(dòng)前重新掛載了根目錄"/"。而由于Mount Namespace的存在這個(gè)掛載對宿主機(jī)不可見。

linux系統(tǒng)中有個(gè)chroot命令,可以在shell這中改變進(jìn)程的根目錄到指定位置。

整個(gè)過程就是修改了進(jìn)程的根目錄,并且掛載了完整的操作系統(tǒng)的文件系統(tǒng)。所以ls獲取的不是宿主機(jī)的內(nèi)容。


而掛載在容器根目錄,用來為容器進(jìn)程提供隔離后執(zhí)行環(huán)境的文件系統(tǒng)就是鏡像。也叫rootfs。

對于docker項(xiàng)目最核心的原理就是為待創(chuàng)建的用戶進(jìn)程:

1.啟用 Linux Namespace 配置;

2.設(shè)置指定的 Cgroups 參數(shù);

3.切換進(jìn)程的根目錄(Change Root)。

docker每run一次就會(huì)生成一層。也就是一個(gè)增量的rootfs。這個(gè)需要用到聯(lián)合文件系統(tǒng)。


聯(lián)合掛載后:


例如:先拉去鏡像


查看image相關(guān)信息: docker image inspect ubuntu:latest


這個(gè)ubuntu鏡像有5個(gè)增量rootfs。每一層都是ubuntu操作系統(tǒng)與目錄一部分。而在使用鏡像的時(shí)候docker會(huì)聯(lián)合掛載到一個(gè)目錄。

? ? 而這個(gè)掛載點(diǎn)就是上面的rootDir:"RootDir": "/var/lib/docker/overlay/0f9dceb5c1c6a0297b3e296caf3129c5e250a17390a2a17bbfae11625094c9b2/root"

ls該路徑即可查看:

注意overlayfs掛載

五層鏡像是如何掛載呢?這里可以看到內(nèi)部id(si)

這里

?mmp 哭暈廁所。? overlayfs掛載 沒找到所謂的si,未完待續(xù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容