任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者等等。Docker提供了MAINTAINER和LABEL用于处理镜像的元数据。
MAINTAINER 指令
MAINTAINER 语法
MAINTAINER <name>
MAINTAINER 语义
指定镜像作者信息,即镜像的Author
属性。LABEL
是一个更灵活的版本,可以替代MAINTAINER
,LABEL
可以设置任何需要设置的元数据,并且可以轻松查看,例如docker inspect
。使用LABEL
设置MAINTAINER
可以使用如下命令:
LABEL maintainer="Securitit@163.com"
MAINTAINER 示例
· MAINTAINER
指令示例
进入/securitit/dockerfile/目录(根据个人选择,这是本文使用的目录),创建dockerfile
文件。
FROM nginx
MAINTAINER Securitit
CMD /bin/bash
执行如下的构建命令,基于dockerfile
构建镜像。
docker build -f /securitit/dockerfile/dockerfile -t securitit-nginx-maintainer:1.0.0.1 .
通过docker inspect
命令查看镜像Author
的值。
docker inspect -f {{".Author"}} 3fb14d33b527
· LABEL
指令示例
进入/securitit/dockerfile/目录(根据个人选择,这是本文使用的目录),编辑dockerfile
文件。
FROM nginx
LABEL maintainer="Securitit"
CMD /bin/bash
执行如下的构建命令,基于dockerfile
构建镜像。
docker build -f /securitit/dockerfile/dockerfile -t securitit-nginx-maintainer:1.0.0.1 .
通过docker inspect
命令查看镜像Config.Labels.maintainer
的值。
docker inspect -f {{".Config.Labels.maintainer"}} 24ac4aa4feb7
MAINTAINER 注意
按照官方文档描述,可以使用LABEL maintainer="xxx"
代替MAINTAINER xxx
,但还是需要注意两者设置的值,在镜像的描述文件中所处位置是不一样的。
· MAINTAINER xxx
位于顶层Author
属性中。
· LABEL maintainer="xxx"
位于Config.Labels.maintainer
属性中。
LABEL 指令
LABEL 语法
LABEL <key>=<value> <key>=<value> <key>=<value> ...
LABEL 语义
· LABEL
为镜像增加元数据,一个LABEL
是键值对,多个键值对之间使用空格分开,命令换行时是使用反斜杠\
。
LABEL "email"="Securitit@13.com"
LABEL email-host="www.wangyi.com"
LABEL email-version="1.0"
LABEL email-description="This is my \
persional email."
· 一个镜像可以有很多LABEL
,可以在一行中指定多个元数据。方法有以下两种:
LABEL multi.label-1="value-1" multi.label-2="value-2" multi.label-3="value-3"
LABEL multi.label-1="value-1" \
multi.label-2="value-2" \
multi.label-3="value-3"
· 基础镜像或父镜像中包含的元数据由当前镜像继承。如果元数据已经存在,但具有不同的值,则最近应用的值将覆盖以前设置的任何值。
LABEL 示例
· 单指令设置多个元数据
进入/securitit/dockerfile/目录(根据个人选择,这是本文使用的目录),创建dockerfile
文件。
FROM nginx
LABEL email="Securitit@163.com" \
email-host="www.wangyi.com" \
email-description="This is my \
persional email."
CMD /bin/bash
执行如下的构建命令,基于dockerfile
构建镜像。
docker build -f /securitit/dockerfile/dockerfile -t securitit-nginx-label:1.0.0.1 .
通过docker inspect
命令查看镜像Config.Labels.maintainer
的值。
docker inspect -f {{".Config.Labels"}} b0e46ba36ff4
· 继承元数据示例
进入/securitit/dockerfile/目录(根据个人选择,这是本文使用的目录),编辑dockerfile
文件,只修改email的内容,其他内容期望从securitit-nginx-label:1.0.0.1
继承。
FROM securitit-nginx-label:1.0.0.1
LABEL email="Securitit@126.com"
CMD /bin/bash
执行如下的构建命令,基于dockerfile
构建镜像。
docker build -f /securitit/dockerfile/dockerfile -t securitit-nginx-label:1.0.0.2 .
通过docker inspect
命令查看镜像Config.Labels.maintainer
的值。
docker inspect -f {{".Config.Labels"}} b0e46ba36ff4
可以看到除了email外,email-host和email-description均是从基础镜像中继承得来的。
总结
MAINTAINER
已经过时,在新版本已不推荐使用,如果允许的尽可能使用LABEL
完成元数据设置,元数据的应用在系列博文中会继续讲解。
若文中存在错误和不足,欢迎指正!