0. 概述
在使用 Docker 之初,出于以前的习惯,我总是想给 Docker 的 Image 加上 build tag,然后用于识别一个 Image 是什么版本的,但是,没有发现好的方式,后面我发现原来 Labels 可以这么用。
1. Dockerfile 添加静态标签
标签可以分为动态添加和静态添加,所谓的静态添加就是指直接写在 Dockerfile 里面,例如这样:
[root@liqiang.io]# cat Dockerfile
FROM alpine:3.10.0
LABEL version="v1.17.0"
LABEL maintainer="Liqiang Lau<[email protected]>"
COPY ./kube-scheduler /bin/kube-scheduler
CMD ["/bin/kube-scheduler"]
然后可以通过 docker inspect
来查看 Image 的 Labels:
[root@liqiang.io]# docker inspect lukelau/kube-scheduler:v1.17.0 | grep -A 3 Labels
"Labels": {
"maintainer": "Liqiang Lau<[email protected]>",
"version": "v1.17.0"
}
--
"Labels": {
"maintainer": "Liqiang Lau<[email protected]>",
"version": "v1.17.0"
}
2. 动态添加标签
有时,直接在 Dockerfile 中写入标签并不是很方便,例如对于 commit hash 这种,所以 Docker 也支持动态的标签,并且需要注意的是动态标签可以覆盖静态标签:
[root@liqiang.io]# export commit=$(git describe --long --tags --dirty | awk '{print substr($$1,2)}')
[root@liqiang.io]# docker build --label "commit=${commit}" --label "maintainer=Liqiang Liu<[email protected]>" -t lukelau/kube-scheduler:v1.17.0 .
[root@liqiang.io]# docker inspect lukelau/kube-scheduler:v1.17.0 | grep -A 3 Labels
"Labels": {
"commit": "1.17.0-18-gf9df883",
"maintainer": "Liqiang Liu<[email protected]>",
"version": "v1.17.0"
--
"Labels": {
"commit": "1.17.0-18-gf9df883",
"maintainer": "Liqiang Liu<[email protected]>",
"version": "v1.17.0"
OK,这就是 Docker 打 Tag 的一点小知识了。