为什么在docker-compose.yml中使用标签,环境无法完成这项工作?

时间:2017-11-13 10:50:04

标签: docker docker-compose dockerfile

我正在学习码头工具。我想弄清楚Docker label可以解决什么样的问题。

我可以理解为什么use label in Dockerfile,例如添加与构建相关的元数据,但我仍然不知道为什么using it在docker-compose.yml中?使用标签与environment之间有什么区别?我假设会有不同的用例,但我无法弄明白。

有人可以给我一些实际的例子吗?

由于

3 个答案:

答案 0 :(得分:1)

docker-compose实用程序使用

docker-compose.yml来构建和运行您在docker-compose.yml中定义的服务
在使用docker-compose时,我们可以使用两件事

  1. docker-compose build这将构建在docker-compose.yml下定义的服务,但是如果要运行{{1},则要运行此服务,它必须具有与docker-engine相同的映像。 },您将找到由docker image ls构建的图像,并在其中进行检查,您会发现docker-compose,该图像定义了该特定图像的元数据。
  2. label将运行在docker-compose up中建立的服务,现在此运行容器必须具有一些docker-container build之类的元数据,该元数据在{{ 1}}

P.S。 :-这是我在堆栈溢出中的第一个答案。如果您没收到评论,我会尽力向您解释。

答案 1 :(得分:1)

labels中使用docker-compose的另一个原因是将您的containers标记为 docker-compose容器套件的一部分,这与其他目的相反每个码头工人image都可能会习惯。

这是一个示例docker-compose.yml,该示例在两个服务之间共享标签:

x-common-labels: &common-labels
  my.project.environment: "my project"
  my.project.maintainer: "me@example.com"

services:
  s1:
    image: somebodyelse/someimage
    labels:
      <<: *common-labels
    # ...
  s2:
    build:
      context: .
    image: my/s2
    labels:
    <<: *common-labels
    # ...

然后,您可以执行此类操作以杀死该项目的容器。

docker rm -f $(docker container ls --format "{{.ID}}" --filter "label=my.project.environment")

re:标签与环境变量

标签仅适用于主机上的dockerdocker-compose命令。

运行时环境 在docker容器中也可以使用环境变量。

答案 2 :(得分:0)

LABEL可用于嵌入有关Docker映像的尽可能多的元数据,从而使其更易于使用。

将LABEL添加到Docker映像的一些主要目的是:

  • 作为文档。
    您可以提供作者,描述,使用说明的链接等。

  • 用于版本控制。
    您可以确保即使具有相同的latest标签的某些新功能也适用于某些版本,因此可能不会破坏某些旧的现有功能。

  • 任何其他用于程序访问的元数据。

page提供了Docker LABEL的指南和最常用的用法。