澄清docker-tag和docker-push命令

时间:2016-09-15 22:21:17

标签: docker

我在构建图片后看到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是一个命名建议,当我们执行REPOSITORY时,它将被解释为单个docker ps字符串。

  2. 来自man docker-push

      

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

    1. 如果我们已经使用注册表主机和用户名等标记了图像,为什么我们需要在push中提供它们?

      由于push确实与注册表通信,我认为REGISTRY_HOST[:REGISTRY_PORT]/]实际上是被解析的,NAME可能引用了tag命令中的[USERNAME/]NAME。此处忽略[REGISTRY_HOST/]中的tag

    2. 我完全猜测tagpush的工作原理。如果我错了,请指出并详细解释。

2 个答案:

答案 0 :(得分:0)

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

  1. Docker TAG - 您可以根据需要标记图片。遵循命名约定和良好实践的规则,您应该使用您的存储库标记它。如果您尝试将图像推送到官方泊坞窗集线器... 需要标记您的帐户名称(只是为了解图像已连接/映射到您的帐户)

  2. 我对此感到有点迷失 - 你只是使用之前给出的标签推送图像("名称"如果你愿意的话)。如果您想在两个不同的位置推送您的图像,您需要通过使用注册表主机信息告诉docker在哪里推送它们。例如,如果您已登录dockerhub,则可以使用docker push youraccount/yourimage。例如,如果您想将gitlab推送到docker图像存储库,他们会要求您使用 - docker push my-registry:5000/my-image

  3. 我认为docker的实际指南有合理的例子 - https://docs.docker.com/engine/getstarted/step_six/

答案 1 :(得分:0)

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

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