Docker FROM指令分层疑问及镜像层数查询方法咨询
Docker镜像层数问题解答
你的Dockerfile实际生成的层数
先看你给出的Dockerfile:
# syntax=docker/dockerfile:1 FROM ubuntu:18.04 LABEL org.opencontainers.image.authors="org@example.com" COPY . /app RUN make /app RUN rm -r $HOME/.cache CMD python /app/app.py
你之前的理解有偏差,实际构建过程中新增的可修改层是3层,加上基础镜像ubuntu:18.04本身的多层,才是最终镜像的总层数:
LABEL和CMD属于镜像元数据,不会生成独立的可修改层(元数据存储在镜像配置中,不占用层存储空间)COPY . /app生成1层RUN make /app生成1层RUN rm -r $HOME/.cache生成1层FROM是引入基础镜像,不会在构建时新增层,而是复用基础镜像已有的多层结构
FROM指令与层的关系
FROM本身不会创建新的可修改层,它的作用是引入一个已有的基础镜像,这个基础镜像本身由多个层组成(比如ubuntu:18.04包含系统初始化、基础软件包安装等多个官方构建的层)。- 如果使用多阶段构建(多个
FROM指令),每个FROM会引入独立的基础镜像,每个基础镜像都有自己的多层结构,不同阶段的层相互独立,最终可以选择将某个阶段的层复制到最终镜像中。
检查镜像层数的方法
有两种常用的命令行方式:
docker history命令:
运行docker history <镜像ID或镜像名称>,输出的每一行对应一个层(包含基础镜像的层),能直观看到每个层对应的指令、大小等信息。
示例:docker history my-ubuntu-appdocker inspect命令:
运行docker inspect <镜像ID或镜像名称>,在输出的RootFS.Layers字段中,每个元素对应一个层的哈希值,统计元素数量即可得到总层数。
示例(过滤输出简化查看):docker inspect my-ubuntu-app | grep -A 10 "RootFS"
内容的提问来源于stack exchange,提问作者hagrawal7777
相关产品推荐
相关产品推荐

