Docker镜像是否共享相同的层?[重复]

5uzkadbs  于 2023-03-22  发布在  Docker
关注(0)|答案(1)|浏览(116)

此问题在此处已有答案

Understanding docker layers and future changes(1个答案)
两年前关闭了。
我知道每个容器都是一个镜像,在一堆只读层之上有一个可读/可写层,多个容器可以共享镜像的只读层。从同一个基础镜像创建的两个镜像是否共享它们相同的镜像?
示例:

  • 图像A有5层,重1GB。
  • 图像B是以A作为基础图像创建的,并添加了另一层,重1.1GB。
  • 图像C是以A作为基础图像创建的,并添加了另一层,重1.5GB

现在的总磁盘空间是3.6GB还是1.6GB?

mdfafbf1

mdfafbf11#

简短回答:1.6GB
你可以做一个有趣的实验:
拉虚拟图像:

docker pull alpine

为 * 子映像 * alpine准备一个Dockerfile(这里我使用dd在映像中创建了一个10 MB的文件)

FROM alpine
RUN dd if=/dev/zero of=file.txt count=10000 bs=1024

构建子映像

docker build -t alpine-plus-ten-mb .

然后检查两个图像并查看图层。

  • 下级目录可以是只读的,也可以是覆盖层本身。
  • 上层目录通常是可写的。
  • 合并后的目录是上下层的统一视图
  • 工作目录用于在层之间切换文件时准备文件。
docker image inspect --format='{{json .GraphDriver.Data}}' alpine
{
    "MergedDir": "/var/lib/docker/overlay2/0654e44ddf13ebd2a0feb2ac6261e62f6c83a8be1937a71c544f69eb6208d93b/merged",
    "UpperDir": "/var/lib/docker/overlay2/0654e44ddf13ebd2a0feb2ac6261e62f6c83a8be1937a71c544f69eb6208d93b/diff",
    "WorkDir": "/var/lib/docker/overlay2/0654e44ddf13ebd2a0feb2ac6261e62f6c83a8be1937a71c544f69eb6208d93b/work"
}

docker image inspect --format='{{json .GraphDriver.Data}}' alpine-plus-ten-mb
{
    "LowerDir": "/var/lib/docker/overlay2/0654e44ddf13ebd2a0feb2ac6261e62f6c83a8be1937a71c544f69eb6208d93b/diff",
    "MergedDir": "/var/lib/docker/overlay2/5ca936630339967105c28d4d8c9669d99f0f449a307c43c09d60f6341cf56271/merged",
    "UpperDir": "/var/lib/docker/overlay2/5ca936630339967105c28d4d8c9669d99f0f449a307c43c09d60f6341cf56271/diff",
    "WorkDir": "/var/lib/docker/overlay2/5ca936630339967105c28d4d8c9669d99f0f449a307c43c09d60f6341cf56271/work"
}

请注意,基本阿尔卑斯山图像(...d93b/diff)的UpperDir看起来是派生图像alpine-plus-ten-mbLowerDir
一个重要方面:层...d93b/diff对于子图像alpine-plus-ten-mb是只读的。换句话说,该层保证是不可变的,这允许其他派生图像重用它并在其上构建自己的增量,而无需复制(创建副本)它。
这是我在构建子映像时用dd人为添加的~ 10 MB delta

sudo du -sh "/var/lib/docker/overlay2/5ca936630339967105c28d4d8c9669d99f0f449a307c43c09d60f6341cf56271/diff"
9.8M    /var/lib/docker/overlay2/5ca936630339967105c28d4d8c9669d99f0f449a307c43c09d60f6341cf56271/diff

相关问题