0. 概述

在使用 Docker 之初,出于以前的习惯,我总是想给 Docker 的 Image 加上 build tag,然后用于识别一个 Image 是什么版本的,但是,没有发现好的方式,后面我发现原来 Labels 可以这么用。

1. Dockerfile 添加静态标签

标签可以分为动态添加和静态添加,所谓的静态添加就是指直接写在 Dockerfile 里面,例如这样:

  1. [root@liqiang.io]# cat Dockerfile
  2. FROM alpine:3.10.0
  3. LABEL version="v1.17.0"
  4. LABEL maintainer="Liqiang Lau<[email protected]>"
  5. COPY ./kube-scheduler /bin/kube-scheduler
  6. CMD ["/bin/kube-scheduler"]

然后可以通过 docker inspect 来查看 Image 的 Labels:

  1. [root@liqiang.io]# docker inspect lukelau/kube-scheduler:v1.17.0 | grep -A 3 Labels
  2. "Labels": {
  3. "maintainer": "Liqiang Lau<[email protected]>",
  4. "version": "v1.17.0"
  5. }
  6. --
  7. "Labels": {
  8. "maintainer": "Liqiang Lau<[email protected]>",
  9. "version": "v1.17.0"
  10. }

2. 动态添加标签

有时,直接在 Dockerfile 中写入标签并不是很方便,例如对于 commit hash 这种,所以 Docker 也支持动态的标签,并且需要注意的是动态标签可以覆盖静态标签:

  1. [root@liqiang.io]# export commit=$(git describe --long --tags --dirty | awk '{print substr($$1,2)}')
  2. [root@liqiang.io]# docker build --label "commit=${commit}" --label "maintainer=Liqiang Liu<[email protected]>" -t lukelau/kube-scheduler:v1.17.0 .
  3. [root@liqiang.io]# docker inspect lukelau/kube-scheduler:v1.17.0 | grep -A 3 Labels
  4. "Labels": {
  5. "commit": "1.17.0-18-gf9df883",
  6. "maintainer": "Liqiang Liu<[email protected]>",
  7. "version": "v1.17.0"
  8. --
  9. "Labels": {
  10. "commit": "1.17.0-18-gf9df883",
  11. "maintainer": "Liqiang Liu<[email protected]>",
  12. "version": "v1.17.0"

OK,这就是 Docker 打 Tag 的一点小知识了。