overlay overlay2

docker作为一个容器平台,它有一套自己的存储系统。它支持的driver有overlay,overlay2, aufs等等。

启动docker,删除本地所有的镜像。进入/var/lib/docker/overlay目录,可以看到此时这个目录下面什么都没有,是空的。



制作了一个名字为aabbcc的image。此时可以在/var/lib/docker/overlay 下面观察到新的层已经生成了。这里每copy一个文件就会生成新的一层。



overlay对于每一层都会构筑一个完整的镜像,镜像和镜像之间通过硬链接共享文件。当启动一个容器时,内核会union mount这个容器所



使用的镜像所对应的layer(lowerdir)和一个读写层(upperdir),并且lowerdir只有一层。



overlay2



用同样的Dockerfile构建一个叫aabbcc的image,观察/var/lib/docker/overlay2下面的文件,我们可以看到各个文件只有一个。
lower文件中存储的是这一层所依赖的低层。它们用冒号隔开,每一条记录都是指向/var/lib/docker/overlay2/l/ 中的软连接。



,overlay实际上通过硬链接在层和层之间共享文件,而overlay2的每一层都是完全独立的。如果容器启动的话,它会将多层lowerdir 挂载到它的rootfs。



这种设计就会带来一个问题,那就是linux系统会限制系统中硬链接的数量,如果用户下载了很多容器,那么docker就会在系统中到处创建硬链接,达到最大值后将无法创建新容器。



因此,我们应该使用overlay2作为docker的graph driver而不是overlay



https://www.cnblogs.com/elnino/p/11015076.html
https://docs.docker.com/storage/storagedriver/overlayfs-driver/



Category docker