Docker overlay存储工作原理 | 您所在的位置:网站首页 › overlay存储 › Docker overlay存储工作原理 |
一、镜像与分层 一个镜像由多个分层组成。Dockerfile中写有每个分层,比如: FROM ubuntu:18.04 COPY . /app RUN make /app CMD python /app/app.pydockerfile中每一行指令都会创建一个层次。每一层保留只有与前一层有差异的部分,一次次进行叠加。当你创建一个‘容器’时,顶层将会创建一个读写层。这个读写层就称之为“容器层”。容器中的文件增加、删除、修改,都在容器层中操作。这些层级之间文件操作由docker的storage driver来进行实现。 二、OverlayFS 工作原理 overlay是storage driver的一种实现。可在/etc/docker/daemon.json中设置 { "storage-driver": "overlay2" }overlay有两层结构,底层叫lowerdir,上层叫upperdir,然后通过merged来提供一个最终合成的视图,来作为容器的实际挂载点。 overlay只有两层,这意味着他无法由多层的镜像组成。镜像的每一层,都在目录/var/lib/docker/overlay下有他自己的目录。 创建一个容器时,镜像的最顶层作为lowerdir(只读),容器中新创建的文件就在upperdir层(可写) 三、宿主机磁盘中的overlay存放方式 /var/lib/docker/overlay/中,每个镜像层都有他自己的文件夹。每一层都只包含他独有的一些文件,与底层共享的那些文件则通过硬链接的方式实现。可高效利用磁盘空间。 $ ls -l /var/lib/docker/overlay/ total 20 drwx------ 3 root root 4096 Jun 20 16:11 38f3ed2eac129654acef11c32670b534670c3a06e483fce313d72e3e0a15baa8 drwx------ 3 root root 4096 Jun 20 16:11 55f1e14c361b90570df46371b20ce6d480c434981cbda5fd68c6ff61aa0a5358 drwx------ 3 root root 4096 Jun 20 16:11 824c8a961a4f5e8fe4f4243dab57c5be798e7fd195f6d88ab06aea92ba931654 drwx------ 3 root root 4096 Jun 20 16:11 ad0fe55125ebf599da124da175174a4b8c1878afe6907bf7c78570341f308461 drwx------ 3 root root 4096 Jun 20 16:11 edab9b5e5bf73f2997524eebeac1de4cf9c8b904fa8ad3ec43b3504196aa3801 $ ls -i /var/lib/docker/overlay/38f3ed2eac129654acef11c32670b534670c3a06e483fce313d72e3e0a15baa8/root/bin/ls 19793696 /var/lib/docker/overlay/38f3ed2eac129654acef11c32670b534670c3a06e483fce313d72e3e0a15baa8/root/bin/ls $ ls -i /var/lib/docker/overlay/55f1e14c361b90570df46371b20ce6d480c434981cbda5fd68c6ff61aa0a5358/root/bin/ls 19793696 /var/lib/docker/overlay/55f1e14c361b90570df46371b20ce6d480c434981cbda5fd68c6ff61aa0a5358/root/bin/ls四、用overlay时,容器读写文件的机制 读文件: 1、容器层中无文件:从lowerdir中读取 2、只有容器层中有文件:直接总容器层中读取 3、容器层与镜像层都有:读容器层中的文件,再隐藏镜像层中的同名文件 文件修改: 第一次写文件:先从镜像复制文件到容器层,在容器层中修改文件 删除文件:容器层中的文件变空文件,但是镜像层中的文件任然未变 重命名目录:只有源和目的路径都在顶层时,才能重命名。 五、性能 overlay的性能比aufs和devicemapper好。 对于读写频繁的文件,需要放入volume存储卷。这些可以跳过storage driver,减少写时拷贝(copy on write)的操作 |
CopyRight 2018-2019 实验室设备网 版权所有 |