Dockerfile 中的 ARG 和 LABEL 是什么

What are ARG and LABEL in a Dockerfile

我有一个 Dockerfile 开始...

FROM some.artifactory.example.com/openjdk:8-jre-alpine

ARG version
LABEL version=$version
...

我想知道 'version' 和“$version”是什么,以及它们作为 ARG 和 LABEL 的值分别有什么作用。就像 ARG version 以某种方式“在范围内”提取一些值,然后 LABEL version=$version 使用它……到什么目的?在有问题的 Dockerfile 中,我没有看到任何提及版本的地方。

A LABEL 是图像上的一段元数据。您可以添加任何 key=val 作为标签。

ARG 是您可以在构建时传递给构建器的东西。然后您可以在构建期间使用 Dockerfile 中的值(但它在运行时不再可用;因此除非您以某种方式将值保存到图像本身,否则容器将不知道该值是什么)。

docker build --build-arg version=1.2.3

根据这个 Dockerfile,作者似乎想在构建时传递一个版本号,并将其保存在元数据中。他们使用 ARG(和 --build-arg)传递值,并使用 LABEL 将其作为元数据存储在结果图像中。

换句话说,这似乎是图像的某种组织/簿记,但它对图像的内容或运行时特性没有影响。