為何容器進(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該路徑即可查看:

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

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