2016-09-15 82 views
0

我在构建图像后看到docker tag ...docker push ...的用法。在使用本地注册表时,人们通常在两个命令中都包含注册表主机地址。这实际上是必要的吗?澄清码头标签和码头推送命令


更多细节和我的想法

man docker-tag

docker tag [-f|--force[=false]] [--help] IMAGE[:TAG] [REGISTRY_HOST/][USERNAME/]NAME[:TAG]

  1. 为什么我们要提供REGISTRY_HOST标记是什么时候?

    据我所知,在做标记时,docker守护程序不会与注册表进行通信。所以我想整个[REGISTRY_HOST/]USERNAME/]NAME是一个命名建议,当我们在做docker ps时,它将被解释为单个REPOSITORY字符串。

man docker-push

docker push [--help] NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]

  • 如果我们已经标记的图像与登记册主机和用户名等,为什么我们需要在push中提供它们?

    由于push与注册表进行通信,我认为REGISTRY_HOST[:REGISTRY_PORT]/]实际上被解析,并且NAME可能在tag命令中引用[USERNAME/]NAME。这里忽略[REGISTRY_HOST/]tag

  • 我完全猜测tagpush是如何工作的。请指出我是否有错,并详细解释。

    回答

    0

    希望我不会错过你的问题。

    1. 码头标签 - 你可以随意标记你的图片。遵循命名约定和良好实践的规则,您应该为您的资料库添加标签。如果您正试图图像推到官方泊坞窗枢纽..它需要与您的帐户名称被标记(简单地理解,图像连接/映射到您的帐户)

    2. 我是丢失了这一点 - 你只是通过使用以前给定的标签(如果你想要的话“名字”)来推送图像。如果你想在两个不同的位置推送你的图片,你需要告诉码头在哪里推送它们 - 通过使用注册表主机信息。因此,例如,如果您已经登录到dockerhub,则可以使用docker push youraccount/yourimage。如果你想推到gitlab,例如您的搬运工图像库,他们问你使用 - docker push my-registry:5000/my-image

    我觉得从码头工人的实际指导有合理的例子 - https://docs.docker.com/engine/getstarted/step_six/

    0
    1. 标记只是为图片添加另一个名称。您可以根据需要为图像提供尽可能多的标签,也可以在构建标签时将其名称与注册表位置相关联,以便它只有一个标签。每个标签通过校验和指向图像,并且没有关于同一图像的任何其他标签的直接知识。

    2. 推送图像取决于标签以知道推送到哪里。 push命令查看“localhost”的第一个斜杠之前的部分,“。”。对于域名/ IP,或端口的“:”,如果发现任何这些,它将推送到该主机。如果找不到它们,默认情况下它会将该名称推送到Docker Hub,他们要求您将用户名作为图像的第一部分。如果你在没有注册表主机名的情况下推送一个图像,它对你为图像创建的其他标签一无所知,事实上,你可以为多个注册表服务器提供多个标签,因此它只能推送到命令行上的标签你给它。