Docker 镜像层:`ADD file: in /` 是什么意思?

2023-12-19

在 Docker Hub 镜像中有命令列表为每个运行图像层。这是一个 golangexample https://hub.docker.com/layers/golang/library/golang/1.15.2/images/sha256-5976acadfa9ccd05b6950c709c1dc99c8a4f3068ea71150cb143f16c4c83ca04?context=explore.

一些应用程序还提供它们的Dockerfile在 GitHub 中。这是一个 golangexample https://github.com/docker-library/golang/blob/master/Dockerfile-debian.template.

根据Docker Hub镜像层,ADD file:4b03b5f551e3fbdf47ec609712007327828f7530cc3455c43bbcdcaf449a75a9 in /是第一个命令。图像层不包含任何“FROM”命令,而且它似乎还不够添加定义 https://docs.docker.com/engine/reference/builder/#add too.

所以问题如下:

  1. 什么是ADD file:<HASH> in /方法?这是什么格式?
  2. 有什么方法可以使用哈希向上追踪吗?我认为哈希代表FROM图像,但似乎没有相应的 API。
  3. 为什么无法使用以下命令构建 dockerfileADD file:<HASH> in /句法?有什么方法可以使用这种语法构建图像,或者在两种格式之间进行转换?

Docker Hub 历史记录视图不显示实际的 Dockerfile;相反,它显示的内容基本上是从docker history的图像。这不会保留您正在寻找的具体细节:它不记得基础映像的名称,或者获取的内容的构建上下文文件名ADDed or COPYed in.

通过 GitHub 和 Docker Hub 链接,golang:*-busterDockerfile https://github.com/docker-library/golang/blob/master/Dockerfile-debian.template建成FROM buildpack-deps:...-scm; buildpack-deps:buster-scm https://github.com/docker-library/buildpack-deps/blob/65d69325ad741cea6dee20781c1faaab2e003d87/debian/buster/scm/Dockerfile is FROM buildpack-deps:buster-curl; that https://github.com/docker-library/buildpack-deps/blob/65d69325ad741cea6dee20781c1faaab2e003d87/debian/buster/curl/Dockerfile is FROM debian:buster;那有一个非常简单的 Dockerfile https://github.com/debuerreotype/docker-debian-artifacts/blob/a05e37469763ce310295d7ed7529c36152bd6030/buster/Dockerfile(此处全文引用):

FROM scratch
ADD rootfs.tar.xz /
CMD ["bash"]

FROM scratch从完全空的图像开始;这是 Docker 镜像树的基础(以及什么告诉docker history和类似的工具来停止)。这ADDline 解压 Debian 系统映像的 tar 文件。

如果你看docker history或者您引用的 Docker Hub 历史记录视图,您应该能够看到发生这些相同的步骤。这ADD file:4b0... in /对应于ADD rootfs.tar.gz /,第二行是CMD ["bash"]。它不被 Dockerfile 或镜像分割,原始文件名来自ADD没有保存。 (无论如何,如果没有contents of the rootfs.tar.gz,所以知道它的文件名只是稍微有帮助,但不是必需的。)

The ADD file:hash in /path语法不是标准 Dockerfile 语法(单词in特别是不属于其中)。我不确定是否有可靠的方法从主机文件或 URL 转换为哈希值,但构建图像并查看其docker history会告诉您(假设您已经获得了文件元数据的完美匹配)。无法返回到原始文件名或语法,并且绝对无法返回到文件内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 镜像层:`ADD file: in /` 是什么意思? 的相关文章

随机推荐