phymooc / learn-docker

0 stars 0 forks source link

镜像原理 #5

Open phymo opened 3 years ago

phymo commented 3 years ago

联合文件系统

UnionFS 每次修改做为一次提交来一层一层叠加

  1. bootfs 加载 包含boot加载器和内核
  2. rootfs: ubuntu/centOS 等典型linux 系统目录文件, 底层使用Host的kernel

Docker 中使用的 AUFS(Advanced Multi-Layered Unification Filesystem)就是一种联合文件系统。 AUFS 支持为每一个成员目录(类似 Git 的分支)设定只读(readonly)、读写(readwrite)和写出(whiteout-able)权限, 同时 AUFS 里有一个类似分层的概念, 对只读权限的分支可以逻辑上进行增量地修改(不影响只读部分的)。

phymo commented 3 years ago

分层

分层的镜像
RootFS.Layers 每操作一步加一层, 分层下载,便于复用

Docker 镜像都是只读的,当容器启动时,一个新的容器增加到镜像层的顶部, 所有操作都在容器层进行, 修改后重新发布为新镜像 镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉

phymo commented 3 years ago

镜像

  1. from 仓库
  2. 其他地方
  3. make by dockfile
phymo commented 3 years ago

Commit 镜像

与git比较类似, 生成新的image,本地? 相当于保存为快照

docker  commit  -m='描述信息' -a="作者” 容器id 目标镜像名:TAG   // 提交容器副本

慎用 commit 生成镜像: 使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为 黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。而且,即使是这个制作镜像的人,过一段时间后也无法记清具体的操作。这种黑箱镜像的维护工作是非常痛苦的。

phymo commented 3 years ago

虚悬镜像

由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 的镜像。这类无标签镜像也被称为 虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:docker image ls -f dangling=true docker image prune 删除 虚悬镜像