Back to Docker Practice

7.14 Label

07_dockerfile/7.14_label.md

1.9.03.4 KB
Original Source

7.14 LABEL 为镜像添加元数据

7.14.1 基本语法

docker
LABEL <key>=<value> <key>=<value> ...

LABEL 指令以键值对的形式给镜像添加元数据。这些数据不会影响镜像的功能,但可以帮助用户理解镜像,或被自动化工具使用。


7.14.2 为什么需要 LABEL

  1. 版本管理:记录版本号、构建时间、Git Commit ID
  2. 联系信息:维护者邮箱、文档地址、支持渠道
  3. 自动化工具:CI/CD 工具可以读取标签触发操作
  4. 许可证信息:声明开源协议

7.14.3 基本用法

定义单个标签

docker
LABEL version="1.0"
LABEL description="这是一个 Web 应用服务器"

定义多个标签:推荐

docker
LABEL maintainer="[email protected]" \
      version="1.2.0" \
      description="My App Description" \
      org.opencontainers.image.authors="Yeasy"

💡 包含空格的值需要用引号括起来。


7.14.4 常用标签规范

为了标准和互操作性,推荐使用 OCI Image Format Specification 定义的标准标签:

标签 Key说明示例
org.opencontainers.image.created构建时间(RFC 3339)2024-01-01T00:00:00Z
org.opencontainers.image.authors作者/维护者[email protected]
org.opencontainers.image.url项目主页https://example.com
org.opencontainers.image.documentation文档地址https://example.com/docs
org.opencontainers.image.source源码仓库https://github.com/user/repo
org.opencontainers.image.version版本号1.0.0
org.opencontainers.image.licenses许可证MIT
org.opencontainers.image.title镜像标题My App
org.opencontainers.image.description描述Production ready web server

示例

docker
LABEL org.opencontainers.image.authors="yeasy" \
      org.opencontainers.image.documentation="https://yeasy.gitbooks.io" \
      org.opencontainers.image.source="https://github.com/yeasy/docker_practice" \
      org.opencontainers.image.licenses="MIT"

7.14.5 MAINTAINER 指令:已废弃

旧版本的 Dockerfile 中常看到 MAINTAINER 指令:

docker
## ❌ 已弃用

MAINTAINER [email protected]

现在推荐使用 LABEL

docker
## ✅ 推荐

LABEL maintainer="[email protected]"

## 或

LABEL org.opencontainers.image.authors="[email protected]"

7.14.6 动态标签

配合 ARG 使用,可以在构建时动态注入标签:

docker
ARG BUILD_DATE
ARG VCS_REF

LABEL org.opencontainers.image.created=$BUILD_DATE \
      org.opencontainers.image.revision=$VCS_REF

构建命令:

bash
$ docker build \
  --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \
  --build-arg VCS_REF=$(git rev-parse --short HEAD) \
  .

7.14.7 查看标签

docker inspect

查看镜像的标签信息:

bash
$ docker inspect nginx --format '{{json .Config.Labels}}' | jq
{
  "maintainer": "NGINX Docker Maintainers <[email protected]>"
}

过滤器

可以使用标签过滤镜像:

bash
## 列出作者是 yeasy 的所有镜像

$ docker images --filter "label=org.opencontainers.image.authors=yeasy"

## 删除所有带有特定标签的镜像

$ docker rmi $(docker images -q --filter "label=stage=builder")