容器层
假设我现在有一个容器test,里面运行的镜像是nginx:latest\
执行以下命令后,在打印结果里找到GraphDriver:Data可以看到以下结果
sh docker inspect test #这里除了用容器名也可以使用容器ID \
LowerDir
LowerDir: 这表示容器镜像的底层目录,通常是一系列以冒号分隔的目录,它们代表了容器镜像的不同层。每一层可能包含文件系统的不同部分,它们共同构成了容器的基础文件系统。在这个例子中,LowerDir列出了多个层,这些层按照它们在镜像中的顺序堆叠。
MergedDir
MergedDir: 这是容器的合并目录,也称为联合挂载点。这个目录是LowerDir中所有层的合并视图,加上UpperDir中的任何更改。当你进入容器并查看其文件系统时,实际上看到的是这个合并后的目录。在这个例子中,MergedDir是/var/lib/docker/overlay2/3dc82d6e04f538300e08c2a555dfe5e3d58aeea506551f2d300fddb447ee2909/merged。
UpperDir
UpperDir: 这个目录包含了容器对文件系统的所有写操作。当容器运行并修改其文件系统时,所有的更改都会在这个目录中体现。这个目录是可写的,而LowerDir中的层是只读的。在这个例子中,UpperDir是/var/lib/docker/overlay2/3dc82d6e04f538300e08c2a555dfe5e3d58aeea506551f2d300fddb447ee2909/diff。
WorkDir
WorkDir: 工作目录是 overlayfs 存储驱动程序用来存放一些内部数据的地方,比如用于实现写时复制(copy-on-write)机制的元数据。通常,用户不需要直接与这个目录交互。在这个例子中,WorkDir是/var/lib/docker/overlay2/3dc82d6e04f538300e08c2a555dfe5e3d58aeea506551f2d300fddb447ee2909/work。
Name
Name: 这表示正在使用的存储驱动程序的名称。在这个例子中,使用的存储驱动是overlay2。
重点看LowerDir部分(这就是容器的层,共计8层):
镜像层
开始构建: 假设我们有一个简单的 Dockerfile,如下所示:
Dockerfile1
FROM ubuntu:latest
开始构建: 假设我们有一个简单的 Dockerfile,如下所示:
Dockerfile2
FROM ubuntu:latest
RUN apt-get update && apt-get install
- 上述的Dockerfile1构建成一个镜像层,sha256:123456...
- Dockerfile2构建成另一个镜像层,sha256:abcdef...
- 实际上构建镜像层sha256:abcded...时会复用镜像层sha256:123456...,除非这时候DockerHub上的ubuntu:latest已经发生了更新,这种情况下不复用,而是会重新拉取新的基础镜像