0%

docker实践13:docker元数据和标签

Docker容器

当容器以docker run方式运行时,可以给容器添加标签。一个容器在任何一个时刻可以有多个标签。

注意这个例子,我们是在CLI里使用标签,而不是使用自动化工具,所以标签并没有使用DNS标记格式。

单标签

添加单标签需要使用选项l = ,下面的例子会给容器加一个user标签并带有一个ID,这样就可以让我们在所有容器中查找指定的user。

1
docker run -l user=12345 -d redis

外部文件

可以使用外部文件的方式来添加多个标签。外部文件中要没行有一个标签,这些标签会被添加到容器中。

下面的语句会添加2个标签,一个是user一个是role。

1
echo 'user=123461' >> labels && echo 'role=cache' >> labels

选项*-label-file=*会将文件中的每一行设置成容器的标签。

1
docker run --label-file=labels -d redis

Docker镜像

镜像的标签和容器的标签的作用相同,不过镜像的标签是写在Dockerfile中的。当容器加载时,镜像的标签会应用到容器实例上。

单标签

在Dockerfile中可以使用LABEL 指令设置标签。

1
LABEL vendor=Katacoda

多标签

要想设置多标签,使用下面的格式。  (“\“)用来分割。注意使用DNS格式来关联第三方工具。

1
LABEL vendor=Katacoda \ com.katacoda.version=0.0.5 \ com.katacoda.build-date=2016-07-01T10:47:29Z \ com.katacoda.course=Docker

查看详细

标签和元数据仅用来查询或者查看。第一个方法就是用 docker inspect 来查看特定的容器或者镜像。

任务

假设环境中已经有了一个容器叫 rd,和一个镜像叫 katacoda-label-example。

容器

根据容器的名字或者hash id,可以查看容器的全部的元数据。

1
docker inspect rd

使用*-f*选项可以指定显示的JSON结果里仅显示Lable的信息。

1
docker inspect -f "{{json .Config.Labels }}" rd

镜像

查看镜像的Lable与容器的方式一致,但是略有不同。使用ContainerConfig而不是Config

1
docker inspect -f "{{json .ContainerConfig.Labels }}" katacoda-label-example

这些标签会一直存在,即便在镜像被撤掉标签后,撤掉标签后这个信息会是**.(These labels will remain even if the image has been untagged. When an image is untagged, it will have the name .)

根据标签查询

查看容器或者镜像的容器可以提供很多有用的信息,但是在生产环境中上千个容器中,使用标签来限定返回的个数会很有用。

过滤容器

使用 docker ps 可以根据lable来过滤指定容器。下面的例子就是过滤lable是user,值是katacoda的容器。

1
docker ps --filter "label=user=scrapbook"

过滤镜像

使用同样的方式过滤镜像。

1
docker images --filter "label=vendor=Katacoda"

注意

过滤时使用的key和value都是大小写敏感的。

Daemon标签

标签也可以应用于Docker的daemon上。当启动一个daemon实例时,可以指定标签,例如在开发服务器或者生产服务器上,指定daemon的角色会是不错的选择。

再之后我们会探讨更多的关于Docker配置和标签使用的更多内容。这里我们简单看一下格式:

1
2
3
4
docker -d \
-H unix:///var/run/docker.sock \
--label com.katacoda.environment="production" \
--label com.katacoda.storage="ssd"

欢迎关注我的其它发布渠道