docker inspect
docker inspect node:alpine
查看元数据信息,一共有三层
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:8c6806a0692459f603d074b4a7bdd38915650f1563f4ec728dad229475a52090",
"sha256:4656c0b053bfca9757d728365435a799b6e052441b319a1f534f8b74b98dbc45",
"sha256:0d0e6d337afe2727f2ad81039883c2f5ecc7867771925a7362964b9083d92470"
]
}
Docker 文件系统是在宿主机上完成 Merge 后,再挂载到容器内的。容器运行后进行docker inspect
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/271aa46cedf7db63ae21b7d5-init/diff:/var/lib/docker/overlay2/95ea717ce9129f68d7d0894c/diff:/var/lib/docker/overlay2/49cf2548f3e28be0a/diff:/var/lib/docker/overlay2/36d2dca45620efab7d5/diff",
"MergedDir": "/var/lib/docker/overlay2/271aa46cedf7db63ae21c1e246269/merged",
"UpperDir": "/var/lib/docker/overlay2/271aa46cedf7db63afc5c1e246269/diff",
"WorkDir": "/var/lib/docker/overlay2/271aa46cedf7dfc5c1e246269/work"
},
"Name": "overlay2"
}
- LowerDir:包含容器内所有层的文件系统,最后一层除外
- UpperDir:容器最上层的文件系统。这也是反映任何运行时修改的地方。
- MergedDir:文件系统所有层的组合视图。
- WorkDir:用于管理文件系统的内部工作目录
得到如下目录即容器的文件系统,该文件系统内能找到add到image中的文件
/var/lib/docker/overlay2/756eb8b3d8663ff88c75c8b2cb24a5ea3d4762da69c68bd9c92bfe3c0c56b368/merged
docker history image
查看镜像的构建历史
docker history zhaojiew/simpleweb
IMAGE CREATED CREATED BY SIZE COMMENT
6a2afd7620b8 3 months ago /bin/sh -c #(nop) ENTRYPOINT ["bash" "entry… 0B
<missing> 3 months ago /bin/sh -c #(nop) COPY dir:b3bfde9230ae02419… 367kB
<missing> 3 months ago /bin/sh -c #(nop) WORKDIR /opt/web 0B
<missing> 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 months ago /bin/sh -c #(nop) ADD file:33ce740675602f891… 164MB
undocker
将image存储为压缩包之后解压,查看image内部文件
sudo docker pull amazonlinux:2
sudo docker save -o al2.tar amazonlinux:2
sudo tar xvf al2.tar
# sudo docker load -i al2.tar
查看分层
cat manifest.json
之后分别解压各层能查看到add到image中的文件
此外还有现成的undocker工具完成这件事,它会直接将所有层解压缩在一起
mkdir image
undocker extract zhaojiew/simpleweb ./image
dive
用于探索 docker 镜像层内容
以及发现减小 docker 镜像大小
的工具
这个工具能够包含之前所有命令的功能,包括查看层数,每层的文件系统目录和文件结构等
还有一个图形化的工具diving更方便查看
https://github.com/vicanso/diving
docker run -d --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 7001:7001 \
vicanso/diving