您的位置:首页 > 其它

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: