docker 在底层使用自己的存储驱动 storage driver ,AUFS(基于联合存储文件系统)
docker文件系统原理.jpg

1、Docker存储

1.1 镜像如何存储

1.1.1 截取的nginx的分层

image.png

1.1.2 nginx这个镜像怎么存的使用:

GraphDriver 图驱动
image.png

  1. "GraphDriver": {
  2. "Data": {
  3. "LowerDir": "/var/lib/docker/overlay2/30d72f9a20112cb7ec61c0beac2accea933561f2f48e3ab717a480c27e55126e/diff
  4. :/var/lib/docker/overlay2/2c88f2cc7d9548e56e7d376881e2c837f64860ac66db1cc34f2a98918f0627e0/diff
  5. :/var/lib/docker/overlay2/9fce0d275065d22e7e594f1dcb5346bc797b6dc34e02ae671572028164a81d4f/diff
  6. :/var/lib/docker/overlay2/0b4cad843b5e51732bb0b3765ca68beaba2bd62430860ca338a481785f3fb01e/diff
  7. :/var/lib/docker/overlay2/cea5756e5a8227d8fa1b23ff6c7f3f67563ce14120756ae9ce0b4e252dbdc546/diff",
  8. "MergedDir": "/var/lib/docker/overlay2/d91fbd0fb638b5505137e691886eb928c91fd574f154d2095675deef8d30dbd5/merged",
  9. "UpperDir": "/var/lib/docker/overlay2/d91fbd0fb638b5505137e691886eb928c91fd574f154d2095675deef8d30dbd5/diff",
  10. "WorkDir": "/var/lib/docker/overlay2/d91fbd0fb638b5505137e691886eb928c91fd574f154d2095675deef8d30dbd5/work"
  11. },

LowerDir :底层目录; 这个diff文件 (只是存储不同);包含小型linux和装好的软件

“LowerDir”: “/var/lib/docker/overlay2/30d72f9a20112cb7ec61c0beac2accea933561f2f48e3ab717a480c27e55126e/diff 用户文件 :/var/lib/docker/overlay2/2c88f2cc7d9548e56e7d376881e2c837f64860ac66db1cc34f2a98918f0627e0/diff 用户文件 :/var/lib/docker/overlay2/9fce0d275065d22e7e594f1dcb5346bc797b6dc34e02ae671572028164a81d4f/diff docker 的启动命令 :/var/lib/docker/overlay2/0b4cad843b5e51732bb0b3765ca68beaba2bd62430860ca338a481785f3fb01e/diff nginx 配置文件 :/var/lib/docker/overlay2/cea5756e5a8227d8fa1b23ff6c7f3f67563ce14120756ae9ce0b4e252dbdc546/diff”, 小linux系统

image.png
倒着看

  1. 小linux系统(FROM apline) + Dockerfile的每一个命令可能都引起了系统的修改,所以和git 一样,只记录变化
  2. 我们进入到这个镜像启动的容器,容器的文件系统就是镜像的;
  3. docker ps -s;可以看到这个容器真正用到的文件大小 1.12K左右
  4. 容器会自己建立层;如果想要改东西,把改的内容复制到容器层即可 docker inspect container ```bash “LowerDir”: “/var/lib/docker/overlay2/41e4fa41a2ad1dca9616d4c8254a04c4d9d6a3d462 c862f1e9a0562de2384dbcinit/diff:/var/lib/docker/overlay2/e3b8bdbb0cfbe5450696c470994b3f99e 8a7942078e2639a788027529c6278f7/diff:/var/lib/docker/overlay2/67b380 2c6bdb5bcdbcccbbe7aed20faa7227d584ab37668a03ff6952e631f7f2/diff:/var /lib/docker/overlay2/f56920fac9c356227079df41c8f4b056118c210bf4c50bd 9bb077bdb4c7524b4/diff:/var/lib/docker/overlay2/0e569a134838b8c20403 39c4fdb1f3868a7118dd7f4907b40468f5fe60f055e5/diff:/var/lib/docker/ov erlay2/2b51c82933078e19d78b74c248dec38164b90d80c1b42f0fdb14249532071 66e/diff”, “MergedDir”: “/var/lib/docker/overlay2/41e4fa41a2ad1dca9616d4c8254a04c4d9d6a3d462 c862f1e9a0562de2384dbc/merged”, “UpperDir”: (镜像的上层可以感知变化) “/var/lib/docker/overlay2/41e4fa41a2ad1dca9616d4c8254a04c4d9d6a3d 462c862f1e9a0562de2384dbc/diff”,【容器的修改后的文件,保存再宿主机哪里呀。 容器删除后,那些容器目录还存在吗?一定不再】 “WorkDir”: “/var/lib/docker/overlay2/41e4fa41a2ad1dca9616d4c8254a04c4d9d6a3d462 c862f1e9a0562de2384dbc/work”

``` MergedDir :
合并目录;
容器最终的完整工作目录全内容都在合并层;
数据卷在容器层产生;
所有的增删改都在容器层;
UpperDir :上层目录; 写实复制
WorkDir :工作目录(临时层),pid;