深入理解 Overlayfs 在Docker中的應(yīng)用
overlayfs 原理之前的文章已經(jīng)介紹,今天我們一起看一下docker 里面是如何使用overlayfs 制作rootfs 的。
首先我們查看容器的文件系統(tǒng)
docker container inspect mycontainer | jq '.[0].GraphDriver'
將會(huì)輸出如下結(jié)果
{
"Data": {
"LowerDir": "/var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab-init/diff:/var/lib/docker/overlay2/524a0d000817a3c20c5d32b79c6153aea545ced8eed7b78ca25e0d74c97efc0d/diff",
"MergedDir": "/var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab/merged",
"UpperDir": "/var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab/diff",
"WorkDir": "/var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab/work" },
"Name": "overlay2"
}
可以清晰地看到 lowerdir、mergerdir 、workdir 以及 upperdir 。其中 upperdir 是可寫(xiě)層,MergedDir 是最終合并的結(jié)果,如果我們執(zhí)行
ls /var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab/merged
bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
便可以看到合并過(guò)后的rootfs 根目錄了。當(dāng)然如果你在 upperdir 里面的改動(dòng)也會(huì)體現(xiàn)在 mergeddir里面。我們可以測(cè)試一下
進(jìn)入 upperdir
進(jìn)入 upperdir
# cd /var/lib/docker/overlay2/d4632166ec8af2c274d8575bc60776489b9ca57631da96809ba533d0d065ce93/diff
創(chuàng)建文件
# cd root/ && touch testfile
查看mergedDir結(jié)果
# ls /var/lib/docker/overlay2/d4632166ec8af2c274d8575bc60776489b9ca57631da96809ba533d0d065ce93/merged/root/
testfile
執(zhí)行mount 命令就可以清楚地看到底層目錄是如何掛載到 merge dir 的。
overlay on/var/lib/docker/overlay2/d4632166ec8af2c274d8575bc60776489b9ca57631da96809ba533d0d065ce93/merged type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/BUMMKXX6V7NKDDXVVYFYMZPD7U:/var/lib/docker/overlay2/l/UAFOM6XM534QEAFJ3OH5NRLJU4,upperdir=/home/chenxy/docker/overlay2/d4632166ec8af2c274d8575bc60776489b9ca57631da96809ba533d0d065ce93/diff,workdir=/home/chenxy/docker/overlay2/d4632166ec8af2c274d8575bc60776489b9ca57631da96809ba533d0d065ce93/work)