Docker构建标记存储库名称

时间:2016-06-14 14:55:46

标签: docker docker-build

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

我想知道的是你在构建图像时可以给出的标志。例如:

$ docker build -t ouruser/sinatra:v2 .

根据文档,t标志用于标记和命名。名称是'之前的部分:',标签是它之后的部分。所以在我们的例子中,名称是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?
  6. 感谢您的帮助!

1 个答案:

答案 0 :(得分:13)

我认为这里的混淆是“存储库”这个词。在Docker中,存储库是具有相同名称的图像的任何构建组,并且可能是多个标记。 “registry”服务器,如hub.docker.com或您自己的私有注册表,拥有多个存储库,例如redis repository on the public registry。那个存储库有不同版本的构建的多个标记。

所以在这样的背景下,回答你的问题:

  1. ouruser / sinatra位于您当地的Docker主机上,直到您执行docker push
  2. 不,存储库和标记是图像的名称。
  3. 在系统本地时,您可以在本地使用此图像。将其推送到注册表后,您可以将其下载到可以访问该注册表的任何其他Docker主机。如果您执行docker save,则可以在另一台主机上保存docker load的图片。
  4. 我确定在docs.docker.com上有文档介绍这个,但我从课堂上学到了。
  5. 用户名/ imagebase格式支持在hub.docker.com中推送到您自己的命名空间。如果没有这个,那么制作第一个“Redis”图像的人称之为“redis”,而下一个人创建自己的名为“redis-improved”的存储库,我们很快就会混淆一些令人困惑的名字,其中不清楚是谁创造了什么是一个有信誉的形象。您在本地制作的图像不需要该命名,但仍然鼓励使用,因为从hub.docker.com提取的图像可能缺少用户名,如果它们由Docker自己维护的话。如果没有您的用户名,您将无法知道自己下载的图像以及自己构建的图像。