Dockerfile LABEL 是什么
LABEL 给镜像附加键值形式的元数据:版本号、源码提交、构建流水线编号、维护团队等。它随镜像一起分发,推送到仓库后仍然可读,因此是资产盘点、来源追溯与合规检查的常用抓手。键名建议按 OCI 推荐的反向域名风格书写,避免团队之间重名冲突;老指令 MAINTAINER 已经废弃,维护者信息统一写进 LABEL。
基本信息
| 语法 | LABEL 键=值 键=值,多个键可用空格分隔或反斜杠续行 |
|---|---|
| 存储位置 | 镜像配置的 Labels 字段,随镜像推拉保留 |
| OCI 推荐键 | org.opencontainers.image 下的 title、version、revision、source、created 等 |
| 替代关系 | MAINTAINER 已废弃,改用 LABEL maintainer=维护人邮箱 |
| 查看 | docker inspect 的 Config.Labels,或镜像检查工具直接读取 |
| 缓存影响 | LABEL 变更会让该层之后的层缓存失效,位置靠后会减少重建成本 |
典型使用场景
- 标注版本与源码提交号,出问题时能直接定位到对应代码
- 写入构建流水线编号,把镜像与构建记录对齐
- 镜像仓库按标签筛选,做资产盘点与版本统计
- 合规检查要求可追溯来源:登记源码地址与构建时间
- 由流水线自动生成标签值,避免手工维护造成信息失真
示例
示例
LABEL org.opencontainers.image.title="myapp" \
org.opencontainers.image.version="1.2.3" \
org.opencontainers.image.revision="9f2c1ab" \
org.opencontainers.image.source="https://git.example.com/team/myapp" \
maintainer="ops@example.com" # 一行多个键,反斜杠续行
# 构建后核对:
# docker inspect --format '{{json .Config.Labels}}' myapp:1.2.3
# docker image inspect myapp:1.2.3 --format '{{index .Config.Labels "org.opencontainers.image.version"}}'常用标签键
| 键 | 含义 | 示例值 |
|---|---|---|
| image.title | 镜像名称 | myapp |
| image.version | 版本号 | 1.2.3 |
| image.revision | 源码提交标识 | 9f2c1ab |
| image.source | 源码仓库地址 | git 仓库 URL |
| image.created | 构建时间 | 标准时间格式的字符串 |
LABEL 只存在于镜像元数据中,容器里的进程读不到:需要传进进程的配置应该用 ENV 或运行时的外部配置。
标签值尽量由 CI 注入:手工维护的版本标签很快就会与实际内容不一致,反而误导排查。
镜像标签与镜像仓库自身的标签是两套东西:前者存在镜像元数据里随镜像走,后者是仓库的版本指针,排障时要分清在读哪一个。