我尝试了解docker如何在文件系统上存储图像和图层。构建图像时,图层将显示在/var/lib/docker/image/overlay2/layerdb
中,图像将显示在/var/lib/docker/image/overlay2/imagedb
中。但是/var/lib/docker/overlay2/
中也有文件。我想知道他们之间有什么区别。
tree /var/lib/docker/
|-- builder
|-- buildkit
|-- containerd
|-- containers
|-- image
| `-- overlay2
| |-- distribution
| |-- imagedb
| | |-- content
| | | `-- sha256
| | `-- metadata
| | `-- sha256
| |-- layerdb
| `-- repositories.json
|-- network
|-- overlay2
| `-- l
|-- plugins
|-- runtimes
|-- swarm
|-- tmp
|-- trust
答案 0 :(得分:0)
好吧,因为我不是Docker专家,所以我可能错了。但这是我经过一段时间研究这个主题后才得出的结论。
拉动图像时,例如docker pull node:6
然后检查图像docker inspect node:6
,您会看到类似以下内容:
[
{
"Id": "sha256:09028f4b5ca3d043b5b3698b62defdbee3ecd8185608897c25e63a2af7e6e19c",
....
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:dd1eb1fd7e08dc9bda0cbea31a89196c453cb218bea80ce64eeb19fadc98d262",
"sha256:a42d312a03bb549752cfaf828dca867cb03763699732a584bb4fa119e0130760",
"sha256:858cd8541f7e8b7b5bb9c72e1757f7c3c8d270b7e21dae30579e0df635ddeacf",
"sha256:8451f9fe00162c8ff891c8982c5bf107cccbe1982718ef80565229ee69dd54cf",
"sha256:cbda574aa37a39a4cdf2898aa974efaf2b6035e8a25992eb1914394b209a54fb",
"sha256:e492023cc4f9bce9e608a6a6f2bb9f223167bab8a3d8d01581125a5dedc18524",
"sha256:b40c77c13a01fc9208237a4a2ee330ad56b7978a81d7c3b545613d06f9d3a6bb",
"sha256:35adca6bf7fec06b18c63a4d4fcf09e0427f61ce0788a09166a869273f894861"
]
},
}
]
/var/lib/docker/image/overlay2/imagedb/content/sha256
存储图像的内容。您将可以在这里找到09028f4b5ca3d043b5b3698b62defdbee3ecd8185608897c25e63a2af7e6e19c
/var/lib/docker/image/overlay2/layerdb/sha256
存储一些链接到实际图层的链。例如,如果尝试在上述检查(dd1eb1f...
)中找到第一层,然后查看cache-id
文件,则将看到实际的层ID。在这种情况下,我看到了4cc446db3a09d2b9146604a6e0a8da9bc37cec32a6b9e7dfa02e21235f1f2e95
现在转到/var/lib/docker/overlay2
并进行搜索(4cc44...
),您将找到它。我认为该目录实际上存储了所有图层。