Docker拉取镜像时的疑惑

Docker拉取镜像时的疑惑

不知道你在拉取镜像的时候会不会有这样的疑惑——我不是只拉取了一个镜像嘛,为什么会出现这么多的东西

Docker中Layer(层)的概念

在 Docker 中,镜像(Image)是由多个层(Layer)组成的。这些层就像文件系统的快照,每一层都记录了从上一层开始的一系列变化。我们上面下载时候出现的ec99f8b99825就属于一个层。

诸如 ec99f8b99825 的字符串是层的唯一标识符(Layer ID)。每一层都有一个独特的 ID,用来识别和引用这一层。拉取镜像时,Docker 会逐层下载这些层,并最终组合成一个完整的镜像。

使用层对于Docker镜像有以下好处:

  1. 共享和复用:如果不同的镜像共享相同的基础层,那么这些层只需要下载和存储一次,节省了磁盘空间和下载时间。
  2. 分层构建:Dockerfile 中的每一条指令(如 RUN, COPY, ADD 等)都会创建一个新的层。这样如果你对 Dockerfile 进行了一些小的修改,Docker 只需要重建修改后的部分,而不需要重新构建整个镜像。

Layer的建立

当你使用 Dockerfile 创建镜像时,Docker 会按照 Dockerfile 中的每一条指令逐步构建镜像。每一条指令都会生成一个新的层,这个层记录了指令执行后文件系统的变化。最终镜像是由这些层按顺序叠加而成。

例如你现在有一个Dockerfile

FROM ubuntu:20.04
RUN apt-get update
RUN apt-get install -y python3
COPY . /app
  • FROM ubuntu:20.04:这条指令会拉取一个基础镜像(ubuntu:20.04)。这个镜像已经包含了操作系统的基本文件系统,它是整个镜像的基础层。
  • RUN apt-get update:这条指令会更新包管理器的索引,并生成一个新的层,记录了更新后的系统状态。
  • RUN apt-get install -y python3:这条指令安装 Python3,同样会生成一个新的层,记录安装 Python3 后文件系统的变化。
  • COPY . /app:这条指令将当前目录下的所有文件复制到镜像中的 /app 目录,生成一个新的层,记录这些文件的添加。

最终生成的镜像由这几层叠加而成,每一层都记录了自上一个层以来的文件系统的变化。

Cached layers (缓存层)

当你运行构建时,构建器会尝试重用早期构建中的层。如果图像的某个图层未更改,则构建器会从构建缓存中选取它。如果自上次构建以来某个层发生了更改,则必须重新构建该层以及后续的所有层。

这样如果你对 Dockerfile 进行了一些小的修改,Docker 只需要重建修改后的部分,而不需要重新构建整个镜像。

Layer的复用

这个其实算比较常见了,如果你拉取的镜像共用同一Layer,那么它不必重新拉取,而是可以复用。

每个层都有一个唯一的 ID,用来标识这一层。这个 ID 是通过对层内容进行哈希计算生成的,因此相同内容的层总是会生成相同的 ID。

当你拉取一个镜像时,Docker 会显示每个层的 ID。例如,诸如 ec99f8b99825 的字符串就是层的 ID。Docker 会逐层检查本地是否已经有该层,如果有就会跳过下载,直接复用本地已有的层。如果没有,则会从镜像仓库下载该层。

Layer的合并与文件系统

当你拉取一个镜像时,Docker 会从远程仓库逐层下载组成该镜像的所有层。每个层下载完成后,Docker 会显示该层的状态,如 “下载完成”、“拉取完成”等。最终,这些层会在本地组合起来,形成完整的镜像。

虽然镜像由多个层组成,但在容器内,这些层会合并为一个统一的文件系统。容器看到的文件系统是这些层的叠加结果,每一层的更改会覆盖上层的内容。例如,如果在后面的层中删除或修改了文件,容器内的文件系统会反映这些变化,而不会看到原始的文件。

如果你对类似的文章感兴趣的话,欢迎访问:小树 | Docker拉取镜像时的疑惑——Layer

参考文章:Docs Docker | Layer

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值