【问题标题】:Docker build tag repository nameDocker 构建标记存储库名称
【发布时间】:2016-10-15 09:26:20
【问题描述】:

可以通过 docker build 命令轻松构建 docker 镜像。

我想知道的是您在构建图像时可以提供的 t 标志。例如:

$ docker build -t ouruser/sinatra:v2 .

根据文档, t 标志用于标记和命名。 name 是 ':' 之前的部分,tag 是它之后的部分。所以在我们的例子中,名称是ouruser/sinatra,标签是v2。

我认为这将是图像名称和标签。但显然,该名称实际上是某个存储库名称?为什么我认为是?好吧,因为如果您在此之后使用命令列出图像:

docker images

你会得到这样的列表:

REPOSITORY          TAG     IMAGE ID      CREATED        SIZE
ouruser/sinatra     latest  5db5f8471261  11 hours ago   446.7 M

砰!大震动!您以为您正在创建一个带有名称的图像,但您指定了一些存储库!与此相关,我有一些问题:

  1. 此存储库位于何处?
  2. 我可以在不创建存储库的情况下为图像命名吗?
  3. 此存储库在哪里以及如何使用或可以使用?
  4. 在哪里可以找到有关此存储库的更多信息?我只发现了这个,说实话并没有什么意义:docker build docs
  5. 为什么通常使用由以下两部分组成的名称:somename/someothername?

感谢您的帮助!

【问题讨论】:

  • 这不是编程问题。尝试询问 ServerFault。
  • sorry :(. 也需要问mm..
  • 这是一个很好的问题,让 docker 开发者了解他们的图像输出。

标签: docker docker-build


【解决方案1】:

我相信这里的混淆是“存储库”这个词。在 Docker 中,存储库是具有相同名称和可能具有多个标签的映像的任何构建组。 “注册”服务器,如 hub.docker.com 或您自己的私有注册中心,拥有多个存储库,例如redis repository on the public registry。该存储库有多个标签用于不同版本的构建。

那么在这样的背景下,回答你的问题:

  1. 我们的用户/sinatra 位于您的本地 Docker 主机上,直到您执行 docker push
  2. 不,repository 和 tag 是镜像的名字。
  3. 虽然在您的系统上是本地的,但您可以在本地使用此映像。将其推送到注册表后,您可以将其下拉到有权访问该注册表的任何其他 Docker 主机。如果您执行docker save,您可以将该图像保存为另一台主机上的docker load
  4. 我确信 docs.docker.com 上的某个地方有相关文档,但我是从课堂上学到的。
  5. username/imagebase 格式开始支持推送到 hub.docker.com 中您自己的命名空间。否则,制作第一个“Redis”图像的人将其称为“redis”,而下一个制作自己的存储库的人称为“redis-improved”,我们很快就会陷入混乱的名称中,不清楚是谁制作了什么以及制作了什么是一个有声望的形象。您在本地制作的镜像不需要该命名,但仍然鼓励使用,因为如果您从 hub.docker.com 拉取的镜像由 Docker 自己维护,它们可能缺少用户名。如果没有您的用户名,您将不知道您下载了哪些图像以及您自己构建了哪些图像。

【讨论】:

猜你喜欢
  • 2020-08-07
  • 1970-01-01
  • 2019-07-08
  • 2020-11-07
  • 2018-01-05
  • 2017-10-12
  • 2015-11-07
  • 1970-01-01
  • 2018-04-21
相关资源
最近更新 更多