3.0.2使用自定义的元数据
2015-09-09 17:01
183 查看
使用自定义的元数据
你可以通过标签(lables)将元数据运用到你的镜像、容器,或守护进程里。元数据具有广泛的用途。使用标签可以为镜像添加注释或许可信息,或识别一个主机。一个标签是一个
<key>/
<value>对。Docker将标签的值保存为字符串。你可以指定多个标签,但是每对
<key>/
<value>必须保证唯一,防止覆盖。如果你多次指定相同的
key,但是值不一样,这样会导致后面指定会覆盖前面。换而言之,Docker只会使用你最后
key=value提供的标签。
注意:对守护进程的标签支持是在Docker 1.4.1开始。对容器和镜像是在Docker 1.6.0。
标签的keys (命令空间)
Docker没有硬性的限制你标签key命令。然而,使用过于简单key可能会引起冲突。例如,你可以通过 芯片的“架构”标签将你的镜像分类:LABEL architecture="amd64" LABEL architecture="ARMv7"
但是用户可以根据构建架构风格对镜像进行分类:
LABEL architecture="Art Nouveau"
为了防止命令的冲突,Docker命令空间标签key使用一个域名的方向符号。参考下面的指导方针去命名你的key:
所有(第三方)工具都应该在它们的key加上作者使用的域名反转符号作为前缀。;例如,
com.example.some-label。
com.docker.*,
io.docker.*和
org.dockerproject.*命令空间为Docker内部使用而保留。
Keys 因该只包含小写字母、数字、点和破折号(例如,
[a-z0-9-.])。
Keys 应该以一个阿拉伯数字开始和结束命名。
Keys 不应该包含连续的点或破折号。
Keys 不应该使用为CLI保留的命名空间(点)。也没有必要在命令行上使用复杂的命令空间。
这些指导方针,Docker没有强制全部遵循。但是,不遵循上述的方针可能会导致你的标签冲突而添加失败。如果你构建一个使用标签的工具,你应该使用为你的标签keys使用命令空间。
标签保存数据的结构
标签纸可以包含任何可以被保存为字符串的值。例如,这个JSON:{ "Description": "A containerized foobar", "Usage": "docker run --rm example/foobar [args]", "License": "GPL", "Version": "0.0.1-beta", "aBoolean": true, "aNumber" : 0.01234, "aNestedArray": ["a", "b", "c"] }
你可以通过字符串序列化,将标签保存成这样的结构:
LABEL com.example.image-specs="{\"Description\":\"A containerized foobar\",\"Usage\":\"docker run --rm example\\/foobar [args]\",\"License\":\"GPL\",\"Version\":\"0.0.1-beta\",\"aBoolean\":true,\"aNumber\":0.01234,\"aNestedArray\":[\"a\",\"b\",\"c\"]}"
当你保存结构化的数据标签是,Docker会把这个数据当做成一个“常规”的字符串。这意味着Docker对基于结构体数据内属性的查询(过滤)无能为力。如果你的工具需要基于内部属性的过滤,这个就需要工具自己实现这个部分功能。
使用 LABEL
指令为镜像添加标签
添加标签到一个镜像里:LABEL [<namespace>.]<key>[=<value>] ...
LABEL指令可以为镜像添加一个标签,且可以随意设置它的值。当标签包含一个空格字符时,要使用双引号其它括起来或使用反斜杠。
LABEL vendor=ACME\ Incorporated LABEL com.example.version.is-beta LABEL com.example.version="0.0.1-beta" LABEL com.example.release-date="2015-02-12"
在单条的
LABEL指令里允许设置多个标签:
LABEL com.example.version="0.0.1-beta" com.example.release-date="2015-02-12"
包装符号反斜杠(
\),也可以用作延续标记:
LABEL vendor=ACME\ Incorporated \ com.example.is-beta \ com.example.version="0.0.1-beta" \ com.example.release-date="2015-02-12"
Docker建议你在单条的
LABEL指令中添加多个标签。为每个标签使用条指令导致性能下降。因为在Dockerfile文件里,每个
LABEL指令就会创建一个新的镜像层。
你可以通过
docker inspect命令查看标签:
$ docker inspect 4fa6e0f0c678 ... "Labels": { "vendor": "ACME Incorporated", "com.example.is-beta": "", "com.example.version": "0.0.1-beta", "com.example.release-date": "2015-02-12" } ... # Inspect labels on container $ docker inspect -f "{{json .Config.Labels }}" 4fa6e0f0c678 {"Vendor":"ACME Incorporated","com.example.is-beta":"","com.example.version":"0.0.1-beta","com.example.release-date":"2015-02-12"} # Inspect labels on images $ docker inspect -f "{{json .ContainerConfig.Labels }}" myimage
基于标签的查询
标签除了可以保存之外,你还可以利用它过滤镜像和容器。列出所用 com.example.is-beta标签是的且正在运行的容器:
# List all running containers that have a `com.example.is-beta` label $ docker ps --filter "label=com.example.is-beta"
列出所有包含
color/
blue的标签且正在运行的容器:
$ docker ps --filter "label=color=blue"
列出所有包含
vendor
ACME的镜像:
$ docker images --filter "label=vendor=ACME"
守护进程标签
docker daemon \ --dns 8.8.8.8 \ --dns 8.8.4.4 \ -H unix:///var/run/docker.sock \ --label com.example.environment="production" \ --label com.example.storage="ssd"
这些标签应用到守护进程的元数据会被包含在
docker info命令的输出里:
docker -D info Containers: 12 Images: 672 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 697 Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 3.13.0-32-generic Operating System: Ubuntu 14.04.1 LTS CPUs: 1 Total Memory: 994.1 MiB Name: docker.example.com ID: RC3P:JTCT:32YS:XYSB:YUBG:VFED:AAJZ:W3YW:76XO:D7NN:TEVU:UCRW Debug mode (server): false Debug mode (client): true File Descriptors: 11 Goroutines: 14 EventsListeners: 0 Init Path: /usr/bin/docker Docker Root Dir: /var/lib/docker WARNING: No swap limit support Labels: com.example.environment=production com.example.storage=ssd
来源: <https://docs.docker.com/userguide/labels-custom-metadata/> [/code]
相关文章推荐
- OMT 对象模型、动态模型和功能模型
- [Ljava.lang.String和java.lang.String区别
- 基于OpenCV性别识别
- 利用R进行多元线性回归分析
- 本地无法启动MySQL服务,报的错误:1067,进程意外终止---解决
- LBaaS配置
- Calabash实战问题总结
- Redis的11种Web应用场景简介
- 三种文件系统
- beans.xml 和 applicationContext.xml配置区别
- 爬虫 代理问题
- 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
- 僵尸进程 http://ar.newsmth.net/thread-8a428b73045f6.html
- 创建快捷方式
- cocos2d-x 3.2使用ttf创建Label
- MySQL学习笔记(3)——约束条件
- nfs的配置
- 多线程例子
- 【ssh】struts文件上传拦截器(单,多文件上传,以及错误信息的返回)
- 字符编解码的故事–ASCII,ANSI,Unicode,Utf-8区别(转)