深入理解 Overlayfs 在Docker中的应用

overlayfs 原理之前的文章已经介绍,今天我们一起看一下docker 里面是如何使用overlayfs 制作rootfs 的。
首页 新闻资讯 行业资讯 深入理解 Overlayfs 在Docker中的应用

overlayfs 原理之前的文章已经介绍,今天我们一起看一下docker 里面是如何使用overlayfs 制作rootfs 的。

c777e6d669f96bd93295605b9b8218500eb87a.png

首先我们查看容器的文件系统

复制

docker container inspect mycontainer | jq '.[0].GraphDriver'
  • 1.

将会输出如下结果

复制

{  
  "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"}
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

可以清晰地看到 lowerdir、mergerdir 、workdir 以及 upperdir 。其中 upperdir 是可写层,MergedDir 是最终合并的结果,如果我们执行

复制

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
  • 1.

  • 2.

便可以看到合并过后的rootfs 根目录了。当然如果你在 upperdir 里面的改动也会体现在 mergeddir里面。我们可以测试一下

进入 upperdir

复制

进入 upperdir
# cd  /var/lib/docker/overlay2/d4632166ec8af2c274d8575bc60776489b9ca57631da96809ba533d0d065ce93/diff

创建文件
# cd root/ && touch testfile

查看mergedDir结果
# ls /var/lib/docker/overlay2/d4632166ec8af2c274d8575bc60776489b9ca57631da96809ba533d0d065ce93/merged/root/testfile
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

执行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)
  • 1.


17    2022-02-14 07:47:26    overlayfs docker rootfs