标注Docker镜像层
我可以为Docker构建层标注一个会出现在 docker history 中的标签吗?
问题
我有一个 Dockerfile,比如
FROM debian-slim:latest
RUN ...
RUN ...
RUN ...
RUN ...
RUN ...
(想象 ... 是一个很长的shell脚本)
当我运行 docker history $IMAGE 时,我看到
IMAGE CREATED CREATED BY SIZE COMMENT
44550aea14a4 15 hours ago RUN |… 4.1kB buildkit.dockerfile.v0
<missing> 15 hours ago RUN |… 30mB buildkit.dockerfile.v0
<missing> 15 hours ago RUN |… 201kB buildkit.dockerfile.v0
<missing> 15 hours ago RUN |… 433kB buildkit.dockerfile.v0
<missing> 15 hours ago RUN |… 51mB buildkit.dockerfile.v0
输出中的 docker history 会截断列 CREATED BY。我可以传递 --no-trunc,但那是一大段文本,难以一眼看懂。
我想要的是对每个 RUN 命令(或任何创建层的命令)有一个简单的标签,能够在 docker history 的输出中显示。这将使我更容易将每个层与 RUN 命令相关联。我知道层是按逆序排序的。但当层数达到几十层时,就很难区分哪一层对应哪一层(想象一个有40行的 docker history $IMAGE)。
是否可以为每个层提供一个有意义的标题、标签、名称?
假设的解决方案
例如,我设想
FROM debian-slim:latest
RUN LAYER=setup-config ...
RUN LAYER=download-pkgs ...
RUN LAYER=install-pkgs ...
RUN LAYER=build-binary ...
RUN LAYER=download-data ...
那么在 docker history $IMAGE 中我可能会看到
IMAGE CREATED CREATED BY SIZE COMMENT
44550aea14a4 15 hours ago setup-config 4.1kB buildkit.dockerfile.v0
<missing> 15 hours ago download-pkgs 30mB buildkit.dockerfile.v0
<missing> 15 hours ago install-pkgs 201kB buildkit.dockerfile.v0
<missing> 15 hours ago build-binary 433kB buildkit.dockerfile.v0
<missing> 15 hours ago download-data 51mB buildkit.dockerfile.v0
这可能吗?
解决方案
没有原生的Docker功能可以为单独的 RUN 层标注一个人性化的名称,并在 docker history 中显示。然而,也许最好的变通方法是在命令本身中嵌入一个标签。
FROM debian:slim
RUN : "setup-config" && echo "doing setup..." && \
cp config.yaml /etc/myapp/
或者,与其读取原始的 docker history,不如使用 Go template 来让输出更易读。
docker history --no-trunc --format "{{.Size}}\t{{.CreatedBy}}" $IMAGE | cut -c1-120
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。